Re: [Xen-devel] [PATCH] xen: Remove unnecessary BUG_ON from __unbind_from_irq()

2018-06-22 Thread Roger Pau Monné
On Thu, Jun 21, 2018 at 01:29:44PM -0400, Boris Ostrovsky wrote:
> Commit 910f8befdf5b ("xen/pirq: fix error path cleanup when binding
> MSIs") fixed a couple of errors in error cleanup path of
> xen_bind_pirq_msi_to_irq(). This cleanup allowed a call to
> __unbind_from_irq() with an unbound irq, which would result in
> triggering the BUG_ON there.
> 
> Since there is really no reason for the BUG_ON (xen_free_irq() can
> operate on unbound irqs) we can remove it.
> 
> Reported-by: Ben Hutchings 
> Signed-off-by: Boris Ostrovsky 

Reviewed-by: Roger Pau Monné 

Thanks, I had this on my queue of TODOs.

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH] build: sync Kconfig with Linux v4.17

2018-06-22 Thread Jan Beulich
>>> On 22.06.18 at 00:24,  wrote:
>> >>> Working patch by patch isn't feasible because of the renames.
>> >> 
>> >> I don't understand - how does path/file naming conflict with working
>> >> patch by patch? Surely a relatively simple sed command could be used
>> >> to change the paths in each patch according to our tree layout. That's
>> >> basically what I'm doing with the MWAIT idle driver; granted, that's just
>> >> a single file.
>> > 
>> > Its 106 commits between the last time I got this in sync. We also don’t 
>> > have 
>> > kbuild and we have a little shim file to map things to our build system so 
>> > for each patch I would have to implement some of those regressions.
>> 
>> Well, I still don't understand: You had to make those 106 commits apply
>> to your tree as well in order to have create the patch you've submitted.
>> Whatever you did (even if you created a giant patch first and massaged
>> that one), the same could have been done for the individual commits. If
>> this indeed takes more than a simple sed invocation, perhaps it would be
>> worth adding a little script to our repo doing just that?
> 
> So I didn't take those 106 commits individually as it was indicated that
> would have been NACKed.

Interesting. Were there any reasons indicated why that would be?

> I didn't even use git proper, I ultimately checked
> out the tag in my linux.git and used cp to copy the files over that I
> mentioned in the commit message. Then I removed the files that went away
> in Linux. I then attempted to build it and fixed up paths and other
> snippets until it all worked. Its a manual process in its very nature.
> 
> Originally when I proposed bringing in Kconfig I had used a script
> that maintained things in the same paths as Linux and indeed allowed us
> to just pull in patches from Linux. I believe the original RFC for
> adding Kconfig started with Linux v4.1 or v4.2 and I had used that
> script to update the final version to v4.3. This was ultimately not used
> because the Xen-specific changes we make (e.g. paths changed, removal of
> tests, use of Config.mk) that ultimately this a manual process.
> 
> Ultimately are you looking for v2 to be which of the following:
> - a series of 106 patches where each one is editted with the necessary
>   changes to make it work standalone (e.g. paths fixed, removal of
>   tests)

This is what I personally would prefer. But seeing that you say others
objected to this approach already, I'm not sure what to suggest.

> - the current patch with details about the process documented in
>   README.source (which is a Xen specific file) and an expanded commit
>   message

This would be a minimal requirement of mine.

Jan


___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [xen-unstable bisection] complete test-amd64-amd64-xl-xsm

2018-06-22 Thread osstest service owner
branch xen-unstable
xenbranch xen-unstable
job test-amd64-amd64-xl-xsm
testid xen-boot

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:  243435bf67e8159495194f623b9e4d8c90140384
  Bug not present: 146dfe9277c2b4a8c399b229e00d819065e3167b
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/124587/


  commit 243435bf67e8159495194f623b9e4d8c90140384
  Author: Andrew Cooper 
  Date:   Thu Jun 7 17:00:37 2018 +0100
  
  x86/spec-ctrl: Mitigations for LazyFPU
  
  Intel Core processors since at least Nehalem speculate past #NM, which is 
the
  mechanism by which lazy FPU context switching is implemented.
  
  On affected processors, Xen must use fully eager FPU context switching to
  prevent guests from being able to read FPU state (SSE/AVX/etc) from 
previously
  scheduled vcpus.
  
  This is part of XSA-267 / CVE-2018-3665
  
  Signed-off-by: Andrew Cooper 
  Reviewed-by: Jan Beulich 


For bisection revision-tuple graph see:
   
http://logs.test-lab.xenproject.org/osstest/results/bisect/xen-unstable/test-amd64-amd64-xl-xsm.xen-boot.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-xl-xsm.xen-boot
 --summary-out=tmp/124587.bisection-summary --basis-template=124090 
--blessings=real,real-bisect xen-unstable test-amd64-amd64-xl-xsm xen-boot
Searching for failure / basis pass:
 124472 fail [host=albana0] / 124299 [host=joubertin0] 124225 [host=elbling1] 
124191 [host=debina0] 124170 [host=italia0] 124140 [host=godello0] 124090 
[host=chardonnay0] 124057 [host=godello1] 124038 [host=huxelrebe1] 123994 
[host=elbling0] 123932 [host=pinot0] 123874 [host=albana1] 123670 ok.
Failure / basis pass flights: 124472 / 123670
(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 cda6fd4d9382205bb792255cd56a91062d404bc0 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
988d66cb78c35c620c2a0eb01bac842e4e99bf0e
Basis pass 57a3ca7835962109d94533465a75e8c716b26845 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
06f542f8f2e446c01bd0edab51e9450af7f6e05b
Generating revisions with ./adhoc-revtuple-generator  
git://xenbits.xen.org/linux-pvops.git#57a3ca7835962109d94533465a75e8c716b26845-cda6fd4d9382205bb792255cd56a91062d404bc0
 
git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860
 
git://xenbits.xen.org/qemu-xen-traditional.git#c8ea0457495342c417c3dc033bba25148b279f60-c8ea0457495342c417c3dc033bba25148b279f60
 
git://xenbits.xen.org/qemu-xen.git#43139135a8938de44f66333831d3a8655d07663a-43139135a8938de44f66333831d3a8655d07663a
 
git://xenbits.xen.org/xen.git#06f542f8f2e446c01bd0edab51e9450af7f6e05b-988d66cb78c35c620c2a0eb01bac842e4e99bf0e
Loaded 2001 nodes in revision graph
Searching for test results:
 123442 [host=joubertin1]
 123569 [host=italia1]
 123670 pass 57a3ca7835962109d94533465a75e8c716b26845 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
06f542f8f2e446c01bd0edab51e9450af7f6e05b
 123932 [host=pinot0]
 123874 [host=albana1]
 123994 [host=elbling0]
 124038 [host=huxelrebe1]
 124057 [host=godello1]
 124090 [host=chardonnay0]
 124140 [host=godello0]
 124170 [host=italia0]
 124191 [host=debina0]
 124299 [host=joubertin0]
 124225 [host=elbling1]
 124372 fail irrelevant
 124416 fail irrelevant
 124522 pass 1dd9566d954230d5dccb48d070dc412bc9358ca8 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
3960f3a52346348e6b0306f65d19375612bd35b9
 124472 fail cda6fd4d9382205bb792255cd56a91062d404bc0 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
988d66cb78c35c620c2a0eb01bac842e4e99bf0e
 124486 pass 57a3ca7835962109d94533465a75e8c716b26845 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
06f542f8f2e446c01bd0edab51e9450af7f6e05b
 124516 fail irrelevant
 1

Re: [Xen-devel] [PATCH] x86/EFI: further correct FPU state handling around runtime calls

2018-06-22 Thread Jan Beulich
>>> On 22.06.18 at 04:18,  wrote:
> On 21/06/18 19:53, Jan Beulich wrote:
>> We must not leave a vCPU with CR0.TS clear when it is not in fully eager
>> mode and has not touched non-lazy state. Instead of adding a 3rd
>> invocation of stts() to vcpu_restore_fpu_eager(), consolidate all of
>> them into a single one done at the end of the function.
>>
>> The new function parameter is not really well named, but
>> "need_stts_if_not_fully_eager" seemed excessive to me. Suggestions
>> welcome.
> 
> I think "maybe_stts" is reasonable here.  At least it is accurate.

I had considered  this name, and discarded it as specifically not
accurate: The call site in efi_rs_leave() absolutely wants the stts()
in not-fully-eager mode.

> OTOH, as we're changing all callsites, can we please rename the function
> to vcpu_restore_fpu_nonlazy() to match the rest of the terminology, and
> avoid this function looking like it restores all state.

Indeed, I could (and hence should) do this.

>> --- a/xen/arch/x86/i387.c
>> +++ b/xen/arch/x86/i387.c
>> @@ -206,11 +206,11 @@ static inline void fpu_fxsave(struct vcp
>>  /*   VCPU FPU Functions*/
>>  /***/
>>  /* Restore FPU state whenever VCPU is schduled in. */
>> -void vcpu_restore_fpu_eager(struct vcpu *v)
>> +void vcpu_restore_fpu_eager(struct vcpu *v, bool need_stts)
>>  {
>>  /* Restore nonlazy extended state (i.e. parts not tracked by CR0.TS). 
> */
>>  if ( !v->arch.fully_eager_fpu && !v->arch.nonlazy_xstate_used )
>> -return;
>> +goto maybe_stts;
> 
> This surely needs to be is_pv_vcpu(v) && (v->arch.pv_vcpu.ctrlreg[0] &
> X86_CR0_TS); ?
> 
> Otherwise, this patch reintroduces the path which unconditionally uses
> stts() around an EFI RS call.

We want an uncondtional stts() here unless in fully eager mode. That's the
crux with the parameter name: In fully eager mode, we clearly do not want
stts(), but otherwise and without doing anything in the function here, this
specific call path needs it. The other two paths don't:
- __context_switch() assumes CR0.TS is still set from the most recent
  vcpu_save_fpu() (i.e. it is simply an optimization to avoid the stts()),
- hvmemul_put_fpu() invokes the function only for fully-eager vCPU-s.

Jan



___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH] build: sync Kconfig with Linux v4.17

2018-06-22 Thread Julien Grall

Hi,

On 06/22/2018 08:42 AM, Jan Beulich wrote:

On 22.06.18 at 00:24,  wrote:

Working patch by patch isn't feasible because of the renames.


I don't understand - how does path/file naming conflict with working
patch by patch? Surely a relatively simple sed command could be used
to change the paths in each patch according to our tree layout. That's
basically what I'm doing with the MWAIT idle driver; granted, that's just
a single file.


Its 106 commits between the last time I got this in sync. We also don’t have
kbuild and we have a little shim file to map things to our build system so
for each patch I would have to implement some of those regressions.


Well, I still don't understand: You had to make those 106 commits apply
to your tree as well in order to have create the patch you've submitted.
Whatever you did (even if you created a giant patch first and massaged
that one), the same could have been done for the individual commits. If
this indeed takes more than a simple sed invocation, perhaps it would be
worth adding a little script to our repo doing just that?


So I didn't take those 106 commits individually as it was indicated that
would have been NACKed.


Interesting. Were there any reasons indicated why that would be?


I could see few reasons to be grumpy with such a series in my inbox. 
Sending a series with 106 is just insane, more that probably no-one is 
going to look at patches one by one (they are imported from Linux).


This is very similar to when a file is imported or update files from 
Linux (e.g usban, SMMU). We don't backport one by one the commit. 
Instead we batch in a single commit.


So why does it have to be different here?




I didn't even use git proper, I ultimately checked
out the tag in my linux.git and used cp to copy the files over that I
mentioned in the commit message. Then I removed the files that went away
in Linux. I then attempted to build it and fixed up paths and other
snippets until it all worked. Its a manual process in its very nature.

Originally when I proposed bringing in Kconfig I had used a script
that maintained things in the same paths as Linux and indeed allowed us
to just pull in patches from Linux. I believe the original RFC for
adding Kconfig started with Linux v4.1 or v4.2 and I had used that
script to update the final version to v4.3. This was ultimately not used
because the Xen-specific changes we make (e.g. paths changed, removal of
tests, use of Config.mk) that ultimately this a manual process.

Ultimately are you looking for v2 to be which of the following:
- a series of 106 patches where each one is editted with the necessary
   changes to make it work standalone (e.g. paths fixed, removal of
   tests)


This is what I personally would prefer. But seeing that you say others
objected to this approach already, I'm not sure what to suggest.


- the current patch with details about the process documented in
   README.source (which is a Xen specific file) and an expanded commit
   message


I am not sure what would the README.source would give you here? Will it 
give a mapping with Linux commit for copyright reasons?


Cheers,

--
Julien Grall

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH] build: sync Kconfig with Linux v4.17

2018-06-22 Thread Jan Beulich
>>> On 22.06.18 at 10:11,  wrote:
> On 06/22/2018 08:42 AM, Jan Beulich wrote:
> On 22.06.18 at 00:24,  wrote:
>>> Working patch by patch isn't feasible because of the renames.
>>
>> I don't understand - how does path/file naming conflict with working
>> patch by patch? Surely a relatively simple sed command could be used
>> to change the paths in each patch according to our tree layout. That's
>> basically what I'm doing with the MWAIT idle driver; granted, that's just
>> a single file.
>
> Its 106 commits between the last time I got this in sync. We also don’t 
> have
> kbuild and we have a little shim file to map things to our build system so
> for each patch I would have to implement some of those regressions.

 Well, I still don't understand: You had to make those 106 commits apply
 to your tree as well in order to have create the patch you've submitted.
 Whatever you did (even if you created a giant patch first and massaged
 that one), the same could have been done for the individual commits. If
 this indeed takes more than a simple sed invocation, perhaps it would be
 worth adding a little script to our repo doing just that?
>>>
>>> So I didn't take those 106 commits individually as it was indicated that
>>> would have been NACKed.
>> 
>> Interesting. Were there any reasons indicated why that would be?
> 
> I could see few reasons to be grumpy with such a series in my inbox. 
> Sending a series with 106 is just insane, more that probably no-one is 
> going to look at patches one by one (they are imported from Linux).

I can see the spam effect of such a patch bomb, sure.

> This is very similar to when a file is imported or update files from 
> Linux (e.g usban, SMMU). We don't backport one by one the commit. 
> Instead we batch in a single commit.
> 
> So why does it have to be different here?

Initial importing is one thing: You either want it, or you don't.
Subsequent updating is another, as explained in the original reply
already. Do we _need_ any of this (bug fixes, new features)? Or is
this _just_ to keep things somewhat in sync? After all, another
option after the initial import is also to solely pull in changes we
actually care about. And obviously there is a myriad of options
somewhere in the middle between the two extremes.

>>> I didn't even use git proper, I ultimately checked
>>> out the tag in my linux.git and used cp to copy the files over that I
>>> mentioned in the commit message. Then I removed the files that went away
>>> in Linux. I then attempted to build it and fixed up paths and other
>>> snippets until it all worked. Its a manual process in its very nature.
>>>
>>> Originally when I proposed bringing in Kconfig I had used a script
>>> that maintained things in the same paths as Linux and indeed allowed us
>>> to just pull in patches from Linux. I believe the original RFC for
>>> adding Kconfig started with Linux v4.1 or v4.2 and I had used that
>>> script to update the final version to v4.3. This was ultimately not used
>>> because the Xen-specific changes we make (e.g. paths changed, removal of
>>> tests, use of Config.mk) that ultimately this a manual process.
>>>
>>> Ultimately are you looking for v2 to be which of the following:
>>> - a series of 106 patches where each one is editted with the necessary
>>>changes to make it work standalone (e.g. paths fixed, removal of
>>>tests)
>> 
>> This is what I personally would prefer. But seeing that you say others
>> objected to this approach already, I'm not sure what to suggest.
>> 
>>> - the current patch with details about the process documented in
>>>README.source (which is a Xen specific file) and an expanded commit
>>>message
> 
> I am not sure what would the README.source would give you here? Will it 
> give a mapping with Linux commit for copyright reasons?

Doug said "details about the process documented", which I consider
helpful for future sync-ing steps (which may end up be done by others
than Doug).

Jan


___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] Ping: [PATCH 2/2] x86/HVM: attempts to emulate FPU insns need to set fpu_initialised

2018-06-22 Thread Jan Beulich
>>> On 15.06.18 at 10:58,  wrote:
> My original way of thinking here was that this would be set anyway at
> the point state gets reloaded after the adjustments hvmemul_put_fpu()
> does, but the flag should already be set before that - after all the
> guest may never again touch the FPU before e.g. getting migrated/saved.
> 
> Signed-off-by: Jan Beulich 
> 
> --- a/xen/arch/x86/hvm/emulate.c
> +++ b/xen/arch/x86/hvm/emulate.c
> @@ -2053,6 +2053,7 @@ static int hvmemul_get_fpu(
>   * masking of all exceptions by FNSTENV.)
>   */
>  save_fpu_enable();
> +curr->fpu_initialised = true;
>  curr->fpu_dirtied = true;
>  if ( (fpu_ctxt->fcw & 0x3f) != 0x3f )
>  {



___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [linux-4.14 test] 124508: regressions - FAIL

2018-06-22 Thread osstest service owner
flight 124508 linux-4.14 real [real]
http://logs.test-lab.xenproject.org/osstest/logs/124508/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-armhf-armhf-xl   6 xen-install  fail REGR. vs. 124389

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl 5 host-ping-check-native fail in 124456 pass in 124508
 test-amd64-amd64-rumprun-amd64 17 rumprun-demo-xenstorels/xenstorels.repeat 
fail pass in 124456

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 10 debian-hvm-install 
fail never pass
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 10 debian-hvm-install 
fail never pass
 test-amd64-i386-libvirt  13 migrate-support-checkfail   never pass
 test-amd64-i386-xl-pvshim12 guest-start  fail   never pass
 test-amd64-i386-libvirt-xsm  13 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt 13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  14 saverestore-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 14 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  14 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-arm64-arm64-xl  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl  14 saverestore-support-checkfail   never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-armhf-armhf-xl-arndale  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  14 saverestore-support-checkfail   never pass
 test-amd64-amd64-qemuu-nested-amd 17 debian-hvm-install/l1/l2  fail never pass
 test-amd64-amd64-libvirt-vhd 12 migrate-support-checkfail   never pass
 test-amd64-i386-xl-qemut-win7-amd64 17 guest-stop  fail never pass
 test-armhf-armhf-xl-multivcpu 13 migrate-support-checkfail  never pass
 test-armhf-armhf-xl-multivcpu 14 saverestore-support-checkfail  never pass
 test-armhf-armhf-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-armhf-armhf-libvirt-xsm 14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-cubietruck 13 migrate-support-checkfail never pass
 test-armhf-armhf-xl-cubietruck 14 saverestore-support-checkfail never pass
 test-armhf-armhf-libvirt 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-xsm  13 migrate-support-checkfail   never pass
 test-armhf-armhf-libvirt 14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-xsm  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 14 saverestore-support-checkfail   never pass
 test-amd64-amd64-xl-qemuu-ws16-amd64 17 guest-stop fail never pass
 test-amd64-amd64-xl-qemuu-win7-amd64 17 guest-stop fail never pass
 test-amd64-i386-xl-qemuu-win7-amd64 17 guest-stop  fail never pass
 test-amd64-amd64-xl-qemut-win7-amd64 17 guest-stop fail never pass
 test-armhf-armhf-libvirt-raw 12 migrate-support-checkfail   never pass
 test-armhf-armhf-libvirt-raw 13 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-vhd  12 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-vhd  13 saverestore-support-checkfail   never pass
 test-amd64-i386-xl-qemuu-ws16-amd64 17 guest-stop  fail never pass
 test-amd64-amd64-xl-qemut-ws16-amd64 17 guest-stop fail never pass
 test-amd64-i386-xl-qemut-ws16-amd64 17 guest-stop  fail never pass
 test-amd64-i386-xl-qemut-win10-i386 10 windows-install fail never pass
 test-amd64-amd64-xl-qemut-win10-i386 10 windows-installfail never pass
 test-amd64-amd64-xl-qemuu-win10-i386 10 windows-installfail never pass
 test-amd64-i386-xl-qemuu-win10-i386 10 windows-install fail never pass

version targeted for testing:
 linux33445c07cd45541410fb4cabd08b10827764c07f
baseline version:
 linuxcda6fd4d9382205bb792255cd56a91062d404bc0

Last test of basis   124389  2018-06-19 04:33:40 Z3 days
Testing same since   124456  2018-06-20 19:09:25 Z1 days

[Xen-devel] [PATCH RFC] x86/xsave: prefer eager clearing of state over eager restoring

2018-06-22 Thread Jan Beulich
Other than FXRSTOR, XRSTOR allows for setting components to their
initial state. Utilize this to clear register state immediately after
having saved a vCPU's state (which we don't defer past
__context_switch()), considering that
- this supposedly reduces power consumption,
- this might even free up physical registers,
- we don't normally save/restore FPU state for a vCPU on every context
  switch (in some initial measurements I've observed an approximate
  50:50 relation between the two on a not overly heavily loaded system;
  it's clear anyway that this is heavily dependent on what exactly a
  vCPU is used for).

Signed-off-by: Jan Beulich 
---
RFC since the full performance effect is still not very clear.

--- a/xen/arch/x86/i387.c
+++ b/xen/arch/x86/i387.c
@@ -33,6 +33,7 @@ static inline void fpu_xrstor(struct vcp
 ok = set_xcr0(v->arch.xcr0_accum | XSTATE_FP_SSE);
 ASSERT(ok);
 xrstor(v, mask);
+v->arch.xstate_dirty = mask;
 ok = set_xcr0(v->arch.xcr0 ?: XSTATE_FP_SSE);
 ASSERT(ok);
 }
@@ -148,6 +149,9 @@ static inline void fpu_xsave(struct vcpu
 ok = set_xcr0(v->arch.xcr0_accum | XSTATE_FP_SSE);
 ASSERT(ok);
 xsave(v, mask);
+xstate_load_init(v->arch.xstate_dirty &
+ v->arch.xsave_area->xsave_hdr.xstate_bv);
+v->arch.xstate_dirty = 0;
 ok = set_xcr0(v->arch.xcr0 ?: XSTATE_FP_SSE);
 ASSERT(ok);
 }
--- a/xen/arch/x86/spec_ctrl.c
+++ b/xen/arch/x86/spec_ctrl.c
@@ -616,7 +616,7 @@ void __init init_speculation_mitigations
 
 /* Check whether Eager FPU should be enabled by default. */
 if ( opt_eager_fpu == -1 )
-opt_eager_fpu = should_use_eager_fpu();
+opt_eager_fpu = !cpu_has_xsave && should_use_eager_fpu();
 
 /* (Re)init BSP state now that default_spec_ctrl_flags has been 
calculated. */
 init_shadow_spec_ctrl_state();
--- a/xen/arch/x86/xstate.c
+++ b/xen/arch/x86/xstate.c
@@ -734,6 +734,7 @@ int handle_xsetbv(u32 index, u64 new_bv)
 cr0 &= ~X86_CR0_TS;
 }
 xrstor(curr, mask);
+curr->arch.xstate_dirty |= mask;
 if ( cr0 & X86_CR0_TS )
 write_cr0(cr0);
 }
@@ -774,12 +775,19 @@ uint64_t read_bndcfgu(void)
 return xstate->xsave_hdr.xstate_bv & X86_XCR0_BNDCSR ? bndcsr->bndcfgu : 0;
 }
 
+void xstate_load_init(uint64_t mask)
+{
+struct vcpu *v = idle_vcpu[smp_processor_id()];
+struct xsave_struct *xstate = v->arch.xsave_area;
+
+memset(&xstate->xsave_hdr, 0, sizeof(xstate->xsave_hdr));
+xrstor(v, mask);
+}
+
 void xstate_set_init(uint64_t mask)
 {
 unsigned long cr0 = read_cr0();
 unsigned long xcr0 = this_cpu(xcr0);
-struct vcpu *v = idle_vcpu[smp_processor_id()];
-struct xsave_struct *xstate = v->arch.xsave_area;
 
 if ( ~xfeature_mask & mask )
 {
@@ -792,8 +800,7 @@ void xstate_set_init(uint64_t mask)
 
 clts();
 
-memset(&xstate->xsave_hdr, 0, sizeof(xstate->xsave_hdr));
-xrstor(v, mask);
+xstate_load_init(mask);
 
 if ( cr0 & X86_CR0_TS )
 write_cr0(cr0);
--- a/xen/include/asm-x86/domain.h
+++ b/xen/include/asm-x86/domain.h
@@ -559,6 +559,11 @@ struct arch_vcpu
  * it explicitly enables it via xcr0.
  */
 uint64_t xcr0_accum;
+/*
+ * Accumulated set of components which may currently be dirty, and hence
+ * should be cleared immediately after saving state.
+ */
+uint64_t xstate_dirty;
 /* This variable determines whether nonlazy extended state has been used,
  * and thus should be saved/restored. */
 bool_t nonlazy_xstate_used;
--- a/xen/include/asm-x86/xstate.h
+++ b/xen/include/asm-x86/xstate.h
@@ -95,6 +95,7 @@ uint64_t get_msr_xss(void);
 uint64_t read_bndcfgu(void);
 void xsave(struct vcpu *v, uint64_t mask);
 void xrstor(struct vcpu *v, uint64_t mask);
+void xstate_load_init(uint64_t mask);
 void xstate_set_init(uint64_t mask);
 bool xsave_enabled(const struct vcpu *v);
 int __must_check validate_xstate(u64 xcr0, u64 xcr0_accum,




___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v3 07/13] xen/arm: Simplify alternative patching of non-writable region

2018-06-22 Thread Konrad Rzeszutek Wilk
On Tue, Jun 12, 2018 at 11:06:16PM +0100, Julien Grall wrote:
> Hi Konrad,
> 
> On 12/06/2018 22:17, Konrad Rzeszutek Wilk wrote:
> > On Tue, Jun 12, 2018 at 12:36:37PM +0100, Julien Grall wrote:
> > > During the MMU setup process, Xen will set SCTLR_EL2.WNX
> > > (Write-Non-eXecutable) bit. Because of that, the alternative code need
> > > to re-mapped the region in a difference place in order to modify the
> > > text section.
> > > 
> > > At the moment, the function patching the code is only aware of the
> > > re-mapped region. This requires the caller to mess with Xen internal in
> > > order to have function such as is_active_kernel_text() working.
> > > 
> > > All the interactions with Xen internal can be removed by specifying the
> > > offset between the region patch and the writable region for updating the
> > > instruction
> > > 
> > > This simplification will also make it easier to integrate dynamic patching
> > > in a follow-up patch. Indeed, the callback address should be in
> > > an original region and not re-mapped only which is writeable 
> > > non-executable.
> > > 
> > > This is part of XSA-263.
> > > 
> > > Signed-off-by: Julien Grall 
> > > Reviewed-by: Stefano Stabellini 
> > > 
> > > ---
> > > 
> > > Cc: Konrad Rzeszutek Wilk 
> > > 
> > >  Changes in v3:
> > >  - Add stefano's reviewed-by
> > > 
> > >  Changes in v2:
> > >  - Add commit message
> > >  - Remove comment in the code that does not make sense anymore
> > > ---
> > >   xen/arch/arm/alternative.c | 42 
> > > +-
> > >   1 file changed, 13 insertions(+), 29 deletions(-)
> > > 
> > > diff --git a/xen/arch/arm/alternative.c b/xen/arch/arm/alternative.c
> > > index 9ffdc475d6..936cf04956 100644
> > > --- a/xen/arch/arm/alternative.c
> > > +++ b/xen/arch/arm/alternative.c
> > > @@ -97,12 +97,16 @@ static u32 get_alt_insn(const struct alt_instr *alt,
> > >   /*
> > >* The region patched should be read-write to allow __apply_alternatives
> > >* to replacing the instructions when necessary.
> > > + *
> > > + * @update_offset: Offset between the region patched and the writable
> > > + * region for the update. 0 if the patched region is writable.
> > >*/
> > > -static int __apply_alternatives(const struct alt_region *region)
> > > +static int __apply_alternatives(const struct alt_region *region,
> > > +paddr_t update_offset)
> > >   {
> > >   const struct alt_instr *alt;
> > > -const u32 *replptr;
> > > -u32 *origptr;
> > > +const u32 *replptr, *origptr;
> > > +u32 *updptr;
> > >   printk(XENLOG_INFO "alternatives: Patching with alt table %p -> 
> > > %p\n",
> > >  region->begin, region->end);
> > > @@ -118,6 +122,7 @@ static int __apply_alternatives(const struct 
> > > alt_region *region)
> > >   BUG_ON(alt->alt_len != alt->orig_len);
> > >   origptr = ALT_ORIG_PTR(alt);
> > > +updptr = (void *)origptr + update_offset;
> > >   replptr = ALT_REPL_PTR(alt);
> > >   nr_inst = alt->alt_len / sizeof(insn);
> > > @@ -125,7 +130,7 @@ static int __apply_alternatives(const struct 
> > > alt_region *region)
> > >   for ( i = 0; i < nr_inst; i++ )
> > >   {
> > >   insn = get_alt_insn(alt, origptr + i, replptr + i);
> > > -*(origptr + i) = cpu_to_le32(insn);
> > > +*(updptr + i) = cpu_to_le32(insn);
> > >   }
> > >   /* Ensure the new instructions reached the memory and nuke */
> > > @@ -162,9 +167,6 @@ static int __apply_alternatives_multi_stop(void 
> > > *unused)
> > >   paddr_t xen_size = _end - _start;
> > >   unsigned int xen_order = get_order_from_bytes(xen_size);
> > >   void *xenmap;
> > > -struct virtual_region patch_region = {
> > > -.list = LIST_HEAD_INIT(patch_region.list),
> > > -};
> > >   BUG_ON(patched);
> > > @@ -177,31 +179,13 @@ static int __apply_alternatives_multi_stop(void 
> > > *unused)
> > >   /* Re-mapping Xen is not expected to fail during boot. */
> > >   BUG_ON(!xenmap);
> > > -/*
> > > - * If we generate a new branch instruction, the target will be
> > > - * calculated in this re-mapped Xen region. So we have to 
> > > register
> > > - * this re-mapped Xen region as a virtual region temporarily.
> > 
> > What about this?
> > 
> > Won't this mean the traps (if there are any) won't be recognized at all
> > during this patching?
> 
> What do you mean by recognized? This new region will only be accessed to
> write instruction. The only potential fault on that region is a data abort.

Exactly the data abort.

My recollection is that the data abort would print a stack trace. And 
the stack trace needs symbol information - which it gets from virtual_region.

But if virtual_region is not registered then the stack won't contain the
name of the function that had an d

Re: [Xen-devel] [PATCH v3 4/6] vpt: split part of pt_intr_post into a separate helper

2018-06-22 Thread Jan Beulich
>>> On 08.06.18 at 17:07,  wrote:
> No functional change.
> 
> Signed-off-by: Roger Pau Monné 

Assuming a subsequent patch re-uses the function
Acked-by: Jan Beulich 

It would be nice though to convert ...

> --- a/xen/arch/x86/hvm/vpt.c
> +++ b/xen/arch/x86/hvm/vpt.c
> @@ -265,6 +265,41 @@ static void pt_timer_fn(void *data)
>  pt_unlock(pt);
>  }
>  
> +static void pt_irq_fired(struct vcpu *v, struct periodic_time *pt)
> +{
> +pt->irq_issued = 0;

... this and ...

> +if ( pt->one_shot )
> +{
> +if ( pt->on_list )
> +list_del(&pt->list);
> +pt->on_list = 0;

... this to "false" in the course of moving the code. Once again an
adjustment that perhaps can be done while committing.

Jan


___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v3 5/6] vpt: add support for level interrupts

2018-06-22 Thread Jan Beulich
>>> On 08.06.18 at 17:07,  wrote:
> @@ -316,7 +317,9 @@ int pt_update_irq(struct vcpu *v)
>  if ( pt->pending_intr_nr )
>  {
>  /* RTC code takes care of disabling the timer itself. */
> -if ( (pt->irq != RTC_IRQ || !pt->priv) && pt_irq_masked(pt) )
> +if ( (pt->irq != RTC_IRQ || !pt->priv) && pt_irq_masked(pt) &&
> + /* Level interrupts should be asserted even if masked. */
> + !pt->level )
>  {
>  /* suspend timer emulation */

Especially with this comment I'm not convinced this change is fully
correct: Once a level triggered interrupt is latched in IRR, no
further assertions are meaningful, and hence emulation could (and
hence should) still be stopped to reduce resource consumption.

> @@ -374,13 +378,36 @@ int pt_update_irq(struct vcpu *v)
>  break;
>  
>  case PTSRC_ioapic:
> -/*
> - * NB: At the moment IO-APIC routed interrupts generated by vpt 
> devices
> - * (HPET) are edge-triggered.
> - */
> -pt_vector = hvm_ioapic_assert(v->domain, irq, false);
> +pt_vector = hvm_ioapic_assert(v->domain, irq, level);
>  if ( pt_vector < 0 || !vlapic_test_irq(vcpu_vlapic(v), pt_vector) )
> +{
>  pt_vector = -1;
> +if ( level )
> +{
> +/*
> + * Level interrupts are asserted even if the interrupt is
> + * masked, so also execute the callback associated with the
> + * timer.
> + */
> +time_cb *cb = NULL;
> +void *cb_priv;
> +
> +spin_lock(&v->arch.hvm_vcpu.tm_lock);
> +/* Make sure the timer is still on the list. */
> +list_for_each_entry ( pt, &v->arch.hvm_vcpu.tm_list, list )
> +if ( pt == earliest_pt )
> +{
> +pt_irq_fired(v, pt);
> +cb = pt->cb;
> +cb_priv = pt->priv;
> +break;
> +}
> +spin_unlock(&v->arch.hvm_vcpu.tm_lock);
> +
> +if ( cb != NULL )
> +cb(v, cb_priv);
> +}
> +}
>  break;

I'm not fully convinced, especially in the case that hvm_ioapic_assert()
returned a negative value: Either the callback needs to be called in all
cases (even if an edge triggered interrupt was not successfully asserted),
or only when an interrupt really gets surfaced to the guest.

> @@ -447,12 +474,13 @@ void pt_migrate(struct vcpu *v)
>  
>  void create_periodic_time(
>  struct vcpu *v, struct periodic_time *pt, uint64_t delta,
> -uint64_t period, uint8_t irq, time_cb *cb, void *data)
> +uint64_t period, uint8_t irq, time_cb *cb, void *data, bool level)
>  {
>  if ( !pt->source ||
>   (irq >= NR_ISAIRQS && pt->source == PTSRC_isa) ||
>   (irq >= hvm_domain_irq(v->domain)->nr_gsis &&
> -  pt->source == PTSRC_ioapic) )
> +  pt->source == PTSRC_ioapic) ||
> + (level && pt->source != PTSRC_ioapic) )

Could I talk you into avoiding the double checking against PTSRC_ioapic,
by using a conditional expression?

Jan



___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] strange behavior with Multiboot2 on EFI

2018-06-22 Thread Kristaps Čivkulis
What I did so far:
Installed Arch Linux inside of Qemu virtual machine.

Inside of virtual machine I added these lines to /etc/default/grub

GRUB_TERMINAL="serial"
GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"

and called grub-mkconfig -o /boot/grub/grub.cfg

Now when I boot my virtual machine the Grub2 uses serial console.

I mounted EFI partition of virtual machine and copied into it Xen
kernel with multiboot2 support, and added following lines to
/mountpoint/grub/grub.cfg

menuentry 'Xen kernel' {
set root='(hd0,1)'
multiboot2 /xen
}

Now I am ready to launch Xen kernel inside my virtual machine.

I launch virtual machine with following command:

sudo qemu-system-x86_64 \
   -hda linux.img \
   -bios OVMF-pure-efi.fd \
   -m 4096 \
   -debugcon file:debug.log -global isa-debugcon.iobase=0x402

After choosing Xen kernel entry the following output goes to serial console:
error: no suitable video mode found.

Here is the tail of debug.log file:

 [Bds]Booting GRUB
 FSOpen: Open '\EFI\GRUB\grubx64.efi' Success
 [Bds] Expand 
HD(1,GPT,EBFF2C69-F2EF-4739-9CDA-2C83CB001691,0x800,0x1FF800)/\EFI\GRUB\grubx64.efi
-> 
PciRoot(0x0)/Pci(0x1,0x1)/Ata(Primary,Master,0x0)/HD(1,GPT,EBFF2C69-F2EF-4739-9CDA-2C83CB001691,0x800,0x1FF800)/\EFI\GRU
 BBY\grubx64.efi
 [Security] 3rd party image[0] can be loaded after EndOfDxe:
PciRoot(0x0)/Pci(0x1,0x1)/Ata(Primary,Master,0x0)/HD(1,GPT,EBFF2C69-F2EF-4739-9CDA-2C83CB001691,0x800,0x1FF800)/\EFI\GRUB\grubx64.efi.
 InstallProtocolInterface: 5B1B31A1-9562-11D2-8E3F-00A0C969723B BF2216C0
 Loading driver at 0x000BE5CF000 EntryPoint=0x000BE5CF400
 InstallProtocolInterface: BC62157E-3E33-4FEC-9920-2D3B36D750DF BF29B518
 ProtectUefiImageCommon - 0xBF2216C0
   - 0xBE5CF000 - 0x0001DC00
 ASSERT 
/home/jenkins/workspace/edk2/rpms/build/edk2-gc2d6e2bc12/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c(4773):
CR has Bad Signature

Qemu version is fresh enough:
$ qemu-system-x86_64 --version
QEMU emulator version 2.12.0
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

I tried to debug Qemu and it didn't even break in 0x3fd05e, the entry
point of Xen kernel.


Maybe I should recompile Grub2 myself instead using the one supplied
by Arch Linux?

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [linux-4.9 test] 124532: regressions - FAIL

2018-06-22 Thread osstest service owner
flight 124532 linux-4.9 real [real]
http://logs.test-lab.xenproject.org/osstest/logs/124532/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-amd64-amd64-xl-qemuu-debianhvm-amd64  7 xen-bootfail REGR. vs. 122969
 test-amd64-amd64-libvirt-xsm  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-shadow7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-qcow2 7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-xsm   7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-pvshim7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-qemut-win7-amd64  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-qemut-win10-i386  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-qemut-ws16-amd64  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-libvirt-vhd  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl   7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-pygrub   7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-qemuu-win10-i386  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-i386-pvgrub  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow 7 xen-boot fail REGR. vs. 
122969
 test-amd64-amd64-pair10 xen-boot/src_hostfail REGR. vs. 122969
 test-amd64-amd64-qemuu-nested-intel  7 xen-boot  fail REGR. vs. 122969
 test-amd64-amd64-pair11 xen-boot/dst_hostfail REGR. vs. 122969
 test-amd64-amd64-xl-qemut-debianhvm-amd64  7 xen-bootfail REGR. vs. 122969
 test-amd64-amd64-libvirt  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-pvhv2-intel  7 xen-boot  fail REGR. vs. 122969
 test-amd64-amd64-xl-credit2   7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-libvirt-pair 10 xen-boot/src_host   fail REGR. vs. 122969
 test-amd64-amd64-libvirt-pair 11 xen-boot/dst_host   fail REGR. vs. 122969
 test-amd64-amd64-amd64-pvgrub  7 xen-bootfail REGR. vs. 122969
 test-amd64-amd64-xl-qemuu-ws16-amd64  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-qemuu-win7-amd64  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-xl-qemut-stubdom-debianhvm-amd64-xsm 7 xen-boot fail REGR. 
vs. 122969
 test-amd64-amd64-xl-multivcpu  7 xen-bootfail REGR. vs. 122969
 test-amd64-amd64-xl-qemuu-ovmf-amd64  7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 7 xen-boot fail REGR. vs. 
122969
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-xsm 7 xen-boot fail REGR. vs. 122969
 test-amd64-amd64-rumprun-amd64  7 xen-boot   fail REGR. vs. 122969
 test-amd64-amd64-examine  8 reboot   fail REGR. vs. 122969
 test-amd64-amd64-xl-qemut-debianhvm-amd64-xsm 7 xen-boot fail REGR. vs. 122969

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-libvirt-raw  6 xen-installfail pass in 124460
 test-armhf-armhf-libvirt  7 xen-boot   fail pass in 124460
 test-amd64-i386-xl-qemuu-ovmf-amd64 16 guest-localmigrate/x10 fail pass in 
124460

Regressions which are regarded as allowable (not blocking):
 test-amd64-amd64-xl-rtds  7 xen-boot fail REGR. vs. 122969

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt13 migrate-support-check fail in 124460 never pass
 test-armhf-armhf-libvirt 14 saverestore-support-check fail in 124460 never pass
 test-armhf-armhf-libvirt-raw 12 migrate-support-check fail in 124460 never pass
 test-armhf-armhf-libvirt-raw 13 saverestore-support-check fail in 124460 never 
pass
 test-amd64-i386-xl-qemut-win7-amd64 17 guest-stop fail like 122969
 test-amd64-i386-xl-qemuu-win7-amd64 17 guest-stop fail like 122969
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 10 debian-hvm-install 
fail never pass
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 7 xen-boot fail never 
pass
 test-amd64-amd64-xl-pvhv2-amd 12 guest-start  fail  never pass
 test-amd64-i386-xl-pvshim12 guest-start  fail   never pass
 test-amd64-i386-libvirt  13 migrate-support-checkfail   never pass
 test-amd64-i386-libvirt-xsm  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  14 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl  14 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  14 saverestore-support-checkfail   never pass
 test-amd64-i386-libvirt-q

[Xen-devel] [GIT PULL] xen: fixes for 4.18-rc2

2018-06-22 Thread Juergen Gross
Linus,

Please git pull the following tag:

 git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip.git 
for-linus-4.18-rc2-tag

xen: fixes for 4.18-rc2

It contains the following fixes/cleanups:

- the removal of a BUG_ON() which wasn't necessary and which could
  trigger now due to a recent change

- a correction of a long standing bug happening very rarely in Xen
  dom0 when a hypercall buffer from user land was not accessible by
  the hypervisor for very short periods of time due to e.g. page
  migration or compaction

- usage of EXPORT_SYMBOL_GPL() instead EXPORT_SYMBOL() in a Xen-related
  driver (no breakage possible as using those symbols without others
  already exported via EXPORT-SYMBOL_GPL() wouldn't make any sense)

- a simplification for Xen PVH or Xen ARM guests

- some additional error handling for callers of xenbus_printf()


Thanks.

Juergen

 arch/arm/xen/enlighten.c |   7 +-
 arch/x86/xen/enlighten.c |   7 ++
 arch/x86/xen/enlighten_pv.c  |   1 +
 arch/x86/xen/enlighten_pvh.c |   1 +
 drivers/scsi/xen-scsifront.c |  33 --
 drivers/xen/Makefile |   2 +-
 drivers/xen/events/events_base.c |   2 -
 drivers/xen/grant-table.c|   4 +-
 drivers/xen/manage.c |  18 +++-
 drivers/xen/privcmd-buf.c| 210 +++
 drivers/xen/privcmd.c|   9 ++
 drivers/xen/privcmd.h|   3 +
 drivers/xen/xen-scsiback.c   |  16 ++-
 include/xen/xen.h|   6 +-
 14 files changed, 297 insertions(+), 22 deletions(-)

Boris Ostrovsky (1):
  xen: Remove unnecessary BUG_ON from __unbind_from_irq()

Juergen Gross (2):
  xen: add new hypercall buffer mapping device

Oleksandr Andrushchenko (1):
  xen/grant-table: Export gnttab_{alloc|free}_pages as GPL

Roger Pau Monne (1):
  xen: share start flags between PV and PVH

Zhouyang Jia (3):
  xen: add error handling for xenbus_printf
  scsi: xen-scsifront: add error handling for xenbus_printf
  xen/scsiback: add error handling for xenbus_printf

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v3 6/6] vhpet: add support for level triggered interrupts

2018-06-22 Thread Jan Beulich
>>> On 08.06.18 at 17:07,  wrote:
> --- a/xen/arch/x86/hvm/hpet.c
> +++ b/xen/arch/x86/hvm/hpet.c
> @@ -223,6 +223,17 @@ static void hpet_stop_timer(HPETState *h, unsigned int 
> tn,
>  hpet_get_comparator(h, tn, guest_time);
>  }
>  
> +static void hpet_timer_fired(struct vcpu *v, void *data)
> +{
> +unsigned int tn = (unsigned int)data;

I don't think this cast will go through without warning on all gcc versions we
care about.

> +HPETState *h = vcpu_vhpet(v);
> +
> +write_lock(&h->lock);
> +ASSERT(!test_bit(tn, &h->hpet.isr));
> +__set_bit(tn, &h->hpet.isr);

if ( __test_and_set_bit() )
ASSERT_UNREACHABLE();

?

Seeing this I can understand why you want to call the callback the way
you do in the previous patch. I continue to be unconvinced this second
call is generally correct (and sufficient). Simply consider the RTC case,
where in theory the IRQ could also be level triggered.

> @@ -394,6 +411,32 @@ static int hpet_write(
>  }
>  break;
>  
> +case HPET_STATUS:
> +/* write 1 to clear. */
> +while ( new_val )
> +{
> +bool active;
> +
> +i = find_first_set_bit(new_val);
> +if ( i >= HPET_TIMER_NUM )
> +break;
> +__clear_bit(i, &new_val);
> +active = __test_and_clear_bit(i, &h->hpet.isr);
> +if ( active )
> +{
> +/*
> + * Should pt->irq better be used here in case the guest 
> changes
> + * the configured IRQ while it's active? Guest changing the 
> IRQ
> + * while the interrupt is active is not documented.
> + */

I think it's better the way you have it, to base things on what is recorded
in h->hpet.isr. After all that's what has been asserted. In fact I don't see
how using pt->irq would address the situation: Isn't it that what changes
first, and hence the de-assert done here would go out of sync with the
prior assert?

> +hvm_ioapic_deassert(v->domain, timer_int_route(h, i));
> +if ( hpet_enabled(h) && timer_enabled(h, i) &&
> + timer_level(h, i) && timer_is_periodic(h, i) )
> +set_start_timer(i);
> +}
> +}
> +break;

What I'm wondering though: Does there really need to be a loop here?
How would more than one bit get set in h->hpet.isr?

Jan



___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [RFC PATCH] mm, oom: distinguish blockable mode for mmu notifiers

2018-06-22 Thread Michal Hocko
From: Michal Hocko 

There are several blockable mmu notifiers which might sleep in
mmu_notifier_invalidate_range_start and that is a problem for the
oom_reaper because it needs to guarantee a forward progress so it cannot
depend on any sleepable locks. Currently we simply back off and mark an
oom victim with blockable mmu notifiers as done after a short sleep.
That can result in selecting a new oom victim prematurely because the
previous one still hasn't torn its memory down yet.

We can do much better though. Even if mmu notifiers use sleepable locks
there is no reason to automatically assume those locks are held.
Moreover most notifiers only care about a portion of the address
space. This patch handles the first part of the problem.
__mmu_notifier_invalidate_range_start gets a blockable flag and
callbacks are not allowed to sleep if the flag is set to false. This is
achieved by using trylock instead of the sleepable lock for most
callbacks. I think we can improve that even further because there is
a common pattern to do a range lookup first and then do something about
that. The first part can be done without a sleeping lock I presume.

Anyway, what does the oom_reaper do with all that? We do not have to
fail right away. We simply retry if there is at least one notifier which
couldn't make any progress. A retry loop is already implemented to wait
for the mmap_sem and this is basically the same thing.

Cc: "David (ChunMing) Zhou" 
Cc: Paolo Bonzini 
Cc: "Radim Krčmář" 
Cc: Alex Deucher 
Cc: "Christian König" 
Cc: David Airlie 
Cc: Jani Nikula 
Cc: Joonas Lahtinen 
Cc: Rodrigo Vivi 
Cc: Doug Ledford 
Cc: Jason Gunthorpe 
Cc: Mike Marciniszyn 
Cc: Dennis Dalessandro 
Cc: Sudeep Dutt 
Cc: Ashutosh Dixit 
Cc: Dimitri Sivanich 
Cc: Boris Ostrovsky 
Cc: Juergen Gross 
Cc: "Jérôme Glisse" 
Cc: Andrea Arcangeli 
Cc: k...@vger.kernel.org (open list:KERNEL VIRTUAL MACHINE FOR X86 (KVM/x86))
Cc: linux-ker...@vger.kernel.org (open list:X86 ARCHITECTURE (32-BIT AND 
64-BIT))
Cc: amd-...@lists.freedesktop.org (open list:RADEON and AMDGPU DRM DRIVERS)
Cc: dri-de...@lists.freedesktop.org (open list:DRM DRIVERS)
Cc: intel-...@lists.freedesktop.org (open list:INTEL DRM DRIVERS (excluding 
Poulsbo, Moorestow...)
Cc: linux-r...@vger.kernel.org (open list:INFINIBAND SUBSYSTEM)
Cc: xen-devel@lists.xenproject.org (moderated list:XEN HYPERVISOR INTERFACE)
Cc: linux...@kvack.org (open list:HMM - Heterogeneous Memory Management)
Reported-by: David Rientjes 
Signed-off-by: Michal Hocko 
---

Hi,
this is an RFC and not tested at all. I am not very familiar with the
mmu notifiers semantics very much so this is a crude attempt to achieve
what I need basically. It might be completely wrong but I would like
to discuss what would be a better way if that is the case.

get_maintainers gave me quite large list of people to CC so I had to trim
it down. If you think I have forgot somebody, please let me know

Any feedback is highly appreciated.

 arch/x86/kvm/x86.c  |  7 --
 drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c  | 33 +++--
 drivers/gpu/drm/i915/i915_gem_userptr.c | 10 +---
 drivers/gpu/drm/radeon/radeon_mn.c  | 15 ---
 drivers/infiniband/core/umem_odp.c  | 15 ---
 drivers/infiniband/hw/hfi1/mmu_rb.c |  7 --
 drivers/misc/mic/scif/scif_dma.c|  7 --
 drivers/misc/sgi-gru/grutlbpurge.c  |  7 --
 drivers/xen/gntdev.c| 14 ---
 include/linux/kvm_host.h|  2 +-
 include/linux/mmu_notifier.h| 15 +--
 mm/hmm.c|  7 --
 mm/mmu_notifier.c   | 15 ---
 mm/oom_kill.c   | 29 +++---
 virt/kvm/kvm_main.c | 12 ++---
 15 files changed, 137 insertions(+), 58 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 6bcecc325e7e..ac08f5d711be 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7203,8 +7203,9 @@ static void vcpu_load_eoi_exitmap(struct kvm_vcpu *vcpu)
kvm_x86_ops->load_eoi_exitmap(vcpu, eoi_exit_bitmap);
 }
 
-void kvm_arch_mmu_notifier_invalidate_range(struct kvm *kvm,
-   unsigned long start, unsigned long end)
+int kvm_arch_mmu_notifier_invalidate_range(struct kvm *kvm,
+   unsigned long start, unsigned long end,
+   bool blockable)
 {
unsigned long apic_address;
 
@@ -7215,6 +7216,8 @@ void kvm_arch_mmu_notifier_invalidate_range(struct kvm 
*kvm,
apic_address = gfn_to_hva(kvm, APIC_DEFAULT_PHYS_BASE >> PAGE_SHIFT);
if (start <= apic_address && apic_address < end)
kvm_make_all_cpus_request(kvm, KVM_REQ_APIC_PAGE_RELOAD);
+
+   return 0;
 }
 
 void kvm_vcpu_reload_apic_access_page(struct kvm_vcpu *vcpu)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
index 83e344fbb50a..d138a526feff 100644
--- a/drivers/

Re: [Xen-devel] [RFC PATCH] mm, oom: distinguish blockable mode for mmu notifiers

2018-06-22 Thread Christian König

Hi Michal,

[Adding Felix as well]

Well first of all you have a misconception why at least the AMD graphics 
driver need to be able to sleep in an MMU notifier: We need to sleep 
because we need to wait for hardware operations to finish and *NOT* 
because we need to wait for locks.


I'm not sure if your flag now means that you generally can't sleep in 
MMU notifiers any more, but if that's the case at least AMD hardware 
will break badly. In our case the approach of waiting for a short time 
for the process to be reaped and then select another victim actually 
sounds like the right thing to do.


What we also already try to do is to abort hardware operations with the 
address space when we detect that the process is dying, but that can 
certainly be improved.


Regards,
Christian.

Am 22.06.2018 um 17:02 schrieb Michal Hocko:

From: Michal Hocko 

There are several blockable mmu notifiers which might sleep in
mmu_notifier_invalidate_range_start and that is a problem for the
oom_reaper because it needs to guarantee a forward progress so it cannot
depend on any sleepable locks. Currently we simply back off and mark an
oom victim with blockable mmu notifiers as done after a short sleep.
That can result in selecting a new oom victim prematurely because the
previous one still hasn't torn its memory down yet.

We can do much better though. Even if mmu notifiers use sleepable locks
there is no reason to automatically assume those locks are held.
Moreover most notifiers only care about a portion of the address
space. This patch handles the first part of the problem.
__mmu_notifier_invalidate_range_start gets a blockable flag and
callbacks are not allowed to sleep if the flag is set to false. This is
achieved by using trylock instead of the sleepable lock for most
callbacks. I think we can improve that even further because there is
a common pattern to do a range lookup first and then do something about
that. The first part can be done without a sleeping lock I presume.

Anyway, what does the oom_reaper do with all that? We do not have to
fail right away. We simply retry if there is at least one notifier which
couldn't make any progress. A retry loop is already implemented to wait
for the mmap_sem and this is basically the same thing.

Cc: "David (ChunMing) Zhou" 
Cc: Paolo Bonzini 
Cc: "Radim Krčmář" 
Cc: Alex Deucher 
Cc: "Christian König" 
Cc: David Airlie 
Cc: Jani Nikula 
Cc: Joonas Lahtinen 
Cc: Rodrigo Vivi 
Cc: Doug Ledford 
Cc: Jason Gunthorpe 
Cc: Mike Marciniszyn 
Cc: Dennis Dalessandro 
Cc: Sudeep Dutt 
Cc: Ashutosh Dixit 
Cc: Dimitri Sivanich 
Cc: Boris Ostrovsky 
Cc: Juergen Gross 
Cc: "Jérôme Glisse" 
Cc: Andrea Arcangeli 
Cc: k...@vger.kernel.org (open list:KERNEL VIRTUAL MACHINE FOR X86 (KVM/x86))
Cc: linux-ker...@vger.kernel.org (open list:X86 ARCHITECTURE (32-BIT AND 
64-BIT))
Cc: amd-...@lists.freedesktop.org (open list:RADEON and AMDGPU DRM DRIVERS)
Cc: dri-de...@lists.freedesktop.org (open list:DRM DRIVERS)
Cc: intel-...@lists.freedesktop.org (open list:INTEL DRM DRIVERS (excluding 
Poulsbo, Moorestow...)
Cc: linux-r...@vger.kernel.org (open list:INFINIBAND SUBSYSTEM)
Cc: xen-devel@lists.xenproject.org (moderated list:XEN HYPERVISOR INTERFACE)
Cc: linux...@kvack.org (open list:HMM - Heterogeneous Memory Management)
Reported-by: David Rientjes 
Signed-off-by: Michal Hocko 
---

Hi,
this is an RFC and not tested at all. I am not very familiar with the
mmu notifiers semantics very much so this is a crude attempt to achieve
what I need basically. It might be completely wrong but I would like
to discuss what would be a better way if that is the case.

get_maintainers gave me quite large list of people to CC so I had to trim
it down. If you think I have forgot somebody, please let me know

Any feedback is highly appreciated.

  arch/x86/kvm/x86.c  |  7 --
  drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c  | 33 +++--
  drivers/gpu/drm/i915/i915_gem_userptr.c | 10 +---
  drivers/gpu/drm/radeon/radeon_mn.c  | 15 ---
  drivers/infiniband/core/umem_odp.c  | 15 ---
  drivers/infiniband/hw/hfi1/mmu_rb.c |  7 --
  drivers/misc/mic/scif/scif_dma.c|  7 --
  drivers/misc/sgi-gru/grutlbpurge.c  |  7 --
  drivers/xen/gntdev.c| 14 ---
  include/linux/kvm_host.h|  2 +-
  include/linux/mmu_notifier.h| 15 +--
  mm/hmm.c|  7 --
  mm/mmu_notifier.c   | 15 ---
  mm/oom_kill.c   | 29 +++---
  virt/kvm/kvm_main.c | 12 ++---
  15 files changed, 137 insertions(+), 58 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 6bcecc325e7e..ac08f5d711be 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7203,8 +7203,9 @@ static void vcpu_load_eoi_exitmap(struct kvm_vcpu *vcpu)
kvm_x86_ops->load_eoi_exitmap(vcpu, e

Re: [Xen-devel] [RFC PATCH] mm, oom: distinguish blockable mode for mmu notifiers

2018-06-22 Thread Michal Hocko
On Fri 22-06-18 17:13:02, Christian König wrote:
> Hi Michal,
> 
> [Adding Felix as well]
> 
> Well first of all you have a misconception why at least the AMD graphics
> driver need to be able to sleep in an MMU notifier: We need to sleep because
> we need to wait for hardware operations to finish and *NOT* because we need
> to wait for locks.
> 
> I'm not sure if your flag now means that you generally can't sleep in MMU
> notifiers any more, but if that's the case at least AMD hardware will break
> badly. In our case the approach of waiting for a short time for the process
> to be reaped and then select another victim actually sounds like the right
> thing to do.

Well, I do not need to make the notifier code non blocking all the time.
All I need is to ensure that it won't sleep if the flag says so and
return -EAGAIN instead.

So here is what I do for amdgpu:

> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c 
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
> > index 83e344fbb50a..d138a526feff 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
> > @@ -136,12 +136,18 @@ void amdgpu_mn_unlock(struct amdgpu_mn *mn)
> >*
> >* Take the rmn read side lock.
> >*/
> > -static void amdgpu_mn_read_lock(struct amdgpu_mn *rmn)
> > +static int amdgpu_mn_read_lock(struct amdgpu_mn *rmn, bool blockable)
> >   {
> > -   mutex_lock(&rmn->read_lock);
> > +   if (blockable)
> > +   mutex_lock(&rmn->read_lock);
> > +   else if (!mutex_trylock(&rmn->read_lock))
> > +   return -EAGAIN;
> > +
> > if (atomic_inc_return(&rmn->recursion) == 1)
> > down_read_non_owner(&rmn->lock);
> > mutex_unlock(&rmn->read_lock);
> > +
> > +   return 0;
> >   }
> >   /**
> > @@ -197,10 +203,11 @@ static void amdgpu_mn_invalidate_node(struct 
> > amdgpu_mn_node *node,
> >* We block for all BOs between start and end to be idle and
> >* unmap them by move them into system domain again.
> >*/
> > -static void amdgpu_mn_invalidate_range_start_gfx(struct mmu_notifier *mn,
> > +static int amdgpu_mn_invalidate_range_start_gfx(struct mmu_notifier *mn,
> >  struct mm_struct *mm,
> >  unsigned long start,
> > -unsigned long end)
> > +unsigned long end,
> > +bool blockable)
> >   {
> > struct amdgpu_mn *rmn = container_of(mn, struct amdgpu_mn, mn);
> > struct interval_tree_node *it;
> > @@ -208,7 +215,11 @@ static void 
> > amdgpu_mn_invalidate_range_start_gfx(struct mmu_notifier *mn,
> > /* notification is exclusive, but interval is inclusive */
> > end -= 1;
> > -   amdgpu_mn_read_lock(rmn);
> > +   /* TODO we should be able to split locking for interval tree and
> > +* amdgpu_mn_invalidate_node
> > +*/
> > +   if (amdgpu_mn_read_lock(rmn, blockable))
> > +   return -EAGAIN;
> > it = interval_tree_iter_first(&rmn->objects, start, end);
> > while (it) {
> > @@ -219,6 +230,8 @@ static void amdgpu_mn_invalidate_range_start_gfx(struct 
> > mmu_notifier *mn,
> > amdgpu_mn_invalidate_node(node, start, end);
> > }
> > +
> > +   return 0;
> >   }
> >   /**
> > @@ -233,10 +246,11 @@ static void 
> > amdgpu_mn_invalidate_range_start_gfx(struct mmu_notifier *mn,
> >* necessitates evicting all user-mode queues of the process. The BOs
> >* are restorted in amdgpu_mn_invalidate_range_end_hsa.
> >*/
> > -static void amdgpu_mn_invalidate_range_start_hsa(struct mmu_notifier *mn,
> > +static int amdgpu_mn_invalidate_range_start_hsa(struct mmu_notifier *mn,
> >  struct mm_struct *mm,
> >  unsigned long start,
> > -unsigned long end)
> > +unsigned long end,
> > +bool blockable)
> >   {
> > struct amdgpu_mn *rmn = container_of(mn, struct amdgpu_mn, mn);
> > struct interval_tree_node *it;
> > @@ -244,7 +258,8 @@ static void amdgpu_mn_invalidate_range_start_hsa(struct 
> > mmu_notifier *mn,
> > /* notification is exclusive, but interval is inclusive */
> > end -= 1;
> > -   amdgpu_mn_read_lock(rmn);
> > +   if (amdgpu_mn_read_lock(rmn, blockable))
> > +   return -EAGAIN;
> > it = interval_tree_iter_first(&rmn->objects, start, end);
> > while (it) {
> > @@ -262,6 +277,8 @@ static void amdgpu_mn_invalidate_range_start_hsa(struct 
> > mmu_notifier *mn,
> > amdgpu_amdkfd_evict_userptr(mem, mm);
> > }
> > }
> > +
> > +   return 0;
> >   }
> >   /**
-- 
Michal Hocko
SUSE Labs

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenpro

Re: [Xen-devel] [PATCH v3 5/6] vpt: add support for level interrupts

2018-06-22 Thread Roger Pau Monné
On Fri, Jun 22, 2018 at 08:23:02AM -0600, Jan Beulich wrote:
> >>> On 08.06.18 at 17:07,  wrote:
> > @@ -316,7 +317,9 @@ int pt_update_irq(struct vcpu *v)
> >  if ( pt->pending_intr_nr )
> >  {
> >  /* RTC code takes care of disabling the timer itself. */
> > -if ( (pt->irq != RTC_IRQ || !pt->priv) && pt_irq_masked(pt) )
> > +if ( (pt->irq != RTC_IRQ || !pt->priv) && pt_irq_masked(pt) &&
> > + /* Level interrupts should be asserted even if masked. */
> > + !pt->level )
> >  {
> >  /* suspend timer emulation */
> 
> Especially with this comment I'm not convinced this change is fully
> correct: Once a level triggered interrupt is latched in IRR, no
> further assertions are meaningful, and hence emulation could (and
> hence should) still be stopped to reduce resource consumption.

Hm, I can see your point, but that's going to make the implementation
of HPET level trigger interrupts more complex.

From my reading of the spec, when a level triggered HPET interrupt
fires the ISR bit must be set, regardless of whether the IRR of the
io-apic entry is set or not.

Maybe the right solution is to add a pt_irq_pending that checks the
IRR bit, and a new flag that the caller can set in order to requests
callbacks regardless of whether the interrupt has been injected or
not. Would you agree to that plan?

> > @@ -374,13 +378,36 @@ int pt_update_irq(struct vcpu *v)
> >  break;
> >  
> >  case PTSRC_ioapic:
> > -/*
> > - * NB: At the moment IO-APIC routed interrupts generated by vpt 
> > devices
> > - * (HPET) are edge-triggered.
> > - */
> > -pt_vector = hvm_ioapic_assert(v->domain, irq, false);
> > +pt_vector = hvm_ioapic_assert(v->domain, irq, level);
> >  if ( pt_vector < 0 || !vlapic_test_irq(vcpu_vlapic(v), pt_vector) )
> > +{
> >  pt_vector = -1;
> > +if ( level )
> > +{
> > +/*
> > + * Level interrupts are asserted even if the interrupt is
> > + * masked, so also execute the callback associated with the
> > + * timer.
> > + */
> > +time_cb *cb = NULL;
> > +void *cb_priv;
> > +
> > +spin_lock(&v->arch.hvm_vcpu.tm_lock);
> > +/* Make sure the timer is still on the list. */
> > +list_for_each_entry ( pt, &v->arch.hvm_vcpu.tm_list, list )
> > +if ( pt == earliest_pt )
> > +{
> > +pt_irq_fired(v, pt);
> > +cb = pt->cb;
> > +cb_priv = pt->priv;
> > +break;
> > +}
> > +spin_unlock(&v->arch.hvm_vcpu.tm_lock);
> > +
> > +if ( cb != NULL )
> > +cb(v, cb_priv);
> > +}
> > +}
> >  break;
> 
> I'm not fully convinced, especially in the case that hvm_ioapic_assert()
> returned a negative value: Either the callback needs to be called in all
> cases (even if an edge triggered interrupt was not successfully asserted),
> or only when an interrupt really gets surfaced to the guest.

See my proposal above for adding a new option to signal whether the
callback should be executed regardless of whether interrupt injection
succeeded or not.

> 
> > @@ -447,12 +474,13 @@ void pt_migrate(struct vcpu *v)
> >  
> >  void create_periodic_time(
> >  struct vcpu *v, struct periodic_time *pt, uint64_t delta,
> > -uint64_t period, uint8_t irq, time_cb *cb, void *data)
> > +uint64_t period, uint8_t irq, time_cb *cb, void *data, bool level)
> >  {
> >  if ( !pt->source ||
> >   (irq >= NR_ISAIRQS && pt->source == PTSRC_isa) ||
> >   (irq >= hvm_domain_irq(v->domain)->nr_gsis &&
> > -  pt->source == PTSRC_ioapic) )
> > +  pt->source == PTSRC_ioapic) ||
> > + (level && pt->source != PTSRC_ioapic) )
> 
> Could I talk you into avoiding the double checking against PTSRC_ioapic,
> by using a conditional expression?

So something like:

pt->source == PTSRC_ioapic ? irq >= hvm_domain_irq(v->domain)->nr_gsis : level

Thanks, Roger.

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH V2 2/2] x86/altp2m: Fixed domain crash with INVALID_ALTP2M EPTP index

2018-06-22 Thread Jan Beulich
>>> On 13.06.18 at 10:52,  wrote:
> --- a/xen/arch/x86/hvm/vmx/vmx.c
> +++ b/xen/arch/x86/hvm/vmx/vmx.c
> @@ -3592,7 +3592,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
>  }
>  }
>  
> -if ( idx != vcpu_altp2m(v).p2midx )
> +if ( idx != INVALID_ALTP2M && idx != vcpu_altp2m(v).p2midx )
>  {
>  BUG_ON(idx >= MAX_ALTP2M);

In the code immediately ahead of this there is an INVALID_ALTP2M check
already (in the else branch). If the __vmread() can legitimately produce
this value, why would the domain be crashed when getting back
INVALID_ALTP2M in the other case? I think the correctness of your change
can only be judged once both code paths behave consistently.

Jan



___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v3 6/6] vhpet: add support for level triggered interrupts

2018-06-22 Thread Roger Pau Monné
On Fri, Jun 22, 2018 at 09:00:27AM -0600, Jan Beulich wrote:
> >>> On 08.06.18 at 17:07,  wrote:
> > --- a/xen/arch/x86/hvm/hpet.c
> > +++ b/xen/arch/x86/hvm/hpet.c
> > @@ -223,6 +223,17 @@ static void hpet_stop_timer(HPETState *h, unsigned int 
> > tn,
> >  hpet_get_comparator(h, tn, guest_time);
> >  }
> >  
> > +static void hpet_timer_fired(struct vcpu *v, void *data)
> > +{
> > +unsigned int tn = (unsigned int)data;
> 
> I don't think this cast will go through without warning on all gcc versions we
> care about.

Hm, should be casted to unsigned long I guess so it's the same size.

> > +HPETState *h = vcpu_vhpet(v);
> > +
> > +write_lock(&h->lock);
> > +ASSERT(!test_bit(tn, &h->hpet.isr));
> > +__set_bit(tn, &h->hpet.isr);
> 
> if ( __test_and_set_bit() )
> ASSERT_UNREACHABLE();
> 
> ?
> 
> Seeing this I can understand why you want to call the callback the way
> you do in the previous patch. I continue to be unconvinced this second
> call is generally correct (and sufficient). Simply consider the RTC case,
> where in theory the IRQ could also be level triggered.

See my reply to the other patch.

> > @@ -394,6 +411,32 @@ static int hpet_write(
> >  }
> >  break;
> >  
> > +case HPET_STATUS:
> > +/* write 1 to clear. */
> > +while ( new_val )
> > +{
> > +bool active;
> > +
> > +i = find_first_set_bit(new_val);
> > +if ( i >= HPET_TIMER_NUM )
> > +break;
> > +__clear_bit(i, &new_val);
> > +active = __test_and_clear_bit(i, &h->hpet.isr);
> > +if ( active )
> > +{
> > +/*
> > + * Should pt->irq better be used here in case the guest 
> > changes
> > + * the configured IRQ while it's active? Guest changing 
> > the IRQ
> > + * while the interrupt is active is not documented.
> > + */
> 
> I think it's better the way you have it, to base things on what is recorded
> in h->hpet.isr. After all that's what has been asserted. In fact I don't see
> how using pt->irq would address the situation: Isn't it that what changes
> first, and hence the de-assert done here would go out of sync with the
> prior assert?

What's in the HPET state can be changed by guest writes, so it might
be more accurate to use pt->irq, which is the IRQ that was asserted by
the vpt code. In any case, I'm not specially trilled because a guest
changing this while the interrupt is active is certainly asking for
trouble.

> > +hvm_ioapic_deassert(v->domain, timer_int_route(h, i));
> > +if ( hpet_enabled(h) && timer_enabled(h, i) &&
> > + timer_level(h, i) && timer_is_periodic(h, i) )
> > +set_start_timer(i);
> > +}
> > +}
> > +break;
> 
> What I'm wondering though: Does there really need to be a loop here?
> How would more than one bit get set in h->hpet.isr?

The current HPET code exposes 3 timers, and all of them can be set to
level triggered, so in theory you could clear the 3 ISR bits with one
write, hence the loop.

Roger.

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [Intel-gfx] [RFC PATCH] mm, oom: distinguish blockable mode for mmu notifiers

2018-06-22 Thread Chris Wilson
Quoting Michal Hocko (2018-06-22 16:02:42)
> Hi,
> this is an RFC and not tested at all. I am not very familiar with the
> mmu notifiers semantics very much so this is a crude attempt to achieve
> what I need basically. It might be completely wrong but I would like
> to discuss what would be a better way if that is the case.
> 
> get_maintainers gave me quite large list of people to CC so I had to trim
> it down. If you think I have forgot somebody, please let me know

> diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c 
> b/drivers/gpu/drm/i915/i915_gem_userptr.c
> index 854bd51b9478..5285df9331fa 100644
> --- a/drivers/gpu/drm/i915/i915_gem_userptr.c
> +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
> @@ -112,10 +112,11 @@ static void del_object(struct i915_mmu_object *mo)
> mo->attached = false;
>  }
>  
> -static void i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier 
> *_mn,
> +static int i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier 
> *_mn,
>struct mm_struct *mm,
>unsigned long start,
> -  unsigned long end)
> +  unsigned long end,
> +  bool blockable)
>  {
> struct i915_mmu_notifier *mn =
> container_of(_mn, struct i915_mmu_notifier, mn);
> @@ -124,7 +125,7 @@ static void 
> i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
> LIST_HEAD(cancelled);
>  
> if (RB_EMPTY_ROOT(&mn->objects.rb_root))
> -   return;
> +   return 0;

The principle wait here is for the HW (even after fixing all the locks
to be not so coarse, we still have to wait for the HW to finish its
access). The first pass would be then to not do anything here if
!blockable.

Jerome keeps on shaking his head and telling us we're doing it all
wrong, so maybe it'll all fall out of HMM before we have to figure out
how to differentiate between objects that can be invalidated immediately
and those that need to acquire locks and/or wait.
-Chris

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v2] x86/mm: Add mem access rights to NPT

2018-06-22 Thread Jan Beulich
>>> On 18.06.18 at 17:17,  wrote:
> From: Isaila Alexandru 
> 
> This patch adds access rights for the NPT pages. The access rights are
> saved in a radix tree with the root saved in p2m_domain.

Sounds resource intensive. How many nodes would such a radix tree have
on average?

> --- a/xen/arch/x86/mm/mem_access.c
> +++ b/xen/arch/x86/mm/mem_access.c
> @@ -221,6 +221,9 @@ bool p2m_mem_access_check(paddr_t gpa, unsigned long gla,
>  {
>  req->u.mem_access.flags |= MEM_ACCESS_GLA_VALID;
>  req->u.mem_access.gla = gla;
> +}
> +if ( npfec.gla_valid || cpu_has_svm )
> +{
>  
>  if ( npfec.kind == npfec_kind_with_gla )

You leave a bogusly placed blank line. Please put it ahead of the if()
you add.

> @@ -112,8 +117,37 @@ static unsigned long p2m_type_to_flags(const struct 
> p2m_domain *p2m,
>  flags |= _PAGE_PWT;
>  ASSERT(!level);
>  }
> -return flags | P2M_BASE_FLAGS | _PAGE_PCD;
> +flags |= P2M_BASE_FLAGS | _PAGE_PCD;
> +break;
> +}
> +switch (access)

Coding style.

> +static void p2m_set_access(struct p2m_domain *p2m, unsigned long gfn,
> +  p2m_access_t a)
> +{
> +int rc;
> +
> +if ( p2m_access_rwx == a )
> +radix_tree_delete(&p2m->mem_access_settings, gfn);
> +
> +rc = radix_tree_insert(&p2m->mem_access_settings, gfn,
> +   radix_tree_int_to_ptr(a));

Is there an "else" missing above here? Otherwise why would you
delete the node first?

Also the access rights are far fewer bits than there can be stored in a
node. Did you consider clustering several GFNs' access rights into a
single node?

> @@ -750,7 +820,7 @@ p2m_pt_get_entry(struct p2m_domain *p2m, gfn_t gfn_,
>   * XXX we will return p2m_invalid for unmapped gfns */
>  *t = p2m_mmio_dm;
>  /* Not implemented except with EPT */
> -*a = p2m_access_rwx; 
> +*a = p2m_access_n;

And the comment remains nevertheless?

> @@ -1127,6 +1200,7 @@ void p2m_pt_init(struct p2m_domain *p2m)
>  p2m->change_entry_type_global = p2m_pt_change_entry_type_global;
>  p2m->change_entry_type_range = p2m_pt_change_entry_type_range;
>  p2m->write_p2m_entry = paging_write_p2m_entry;
> +radix_tree_init(&p2m->mem_access_settings);

While I don't think there's a risk of races, wouldn't it be better anyway
to set up resources before installing hooks / callbacks?

> --- a/xen/arch/x86/mm/p2m.c
> +++ b/xen/arch/x86/mm/p2m.c
> @@ -675,6 +675,9 @@ void p2m_teardown(struct p2m_domain *p2m)
>  
>  d = p2m->domain;
>  
> +if ( cpu_has_svm )
> +radix_tree_destroy(&p2m->mem_access_settings, NULL);

What about shadow mode, or SVM without NPT? The init above is not
conditional upon SVM, nor is any of the manipulation of the radix tree.

> --- a/xen/include/asm-x86/mem_access.h
> +++ b/xen/include/asm-x86/mem_access.h
> @@ -46,7 +46,7 @@ bool p2m_mem_access_emulate_check(struct vcpu *v,
>  /* Sanity check for mem_access hardware support */
>  static inline bool p2m_mem_access_sanity_check(struct domain *d)
>  {
> -return is_hvm_domain(d) && cpu_has_vmx && hap_enabled(d);
> +return is_hvm_domain(d) && hap_enabled(d);

Considering this, should initialization and manipulation perhaps become
conditional upon hap_enabled(d) (perhaps implicitly by finding the radix
tree uninitialized)? Or even some more specific predicate, so that the
tree wouldn't be maintained at all unless someone cared about the
access rights?

Jan



___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v3 5/6] vpt: add support for level interrupts

2018-06-22 Thread Jan Beulich
>>> On 22.06.18 at 17:24,  wrote:
> On Fri, Jun 22, 2018 at 08:23:02AM -0600, Jan Beulich wrote:
>> >>> On 08.06.18 at 17:07,  wrote:
>> > @@ -316,7 +317,9 @@ int pt_update_irq(struct vcpu *v)
>> >  if ( pt->pending_intr_nr )
>> >  {
>> >  /* RTC code takes care of disabling the timer itself. */
>> > -if ( (pt->irq != RTC_IRQ || !pt->priv) && pt_irq_masked(pt) )
>> > +if ( (pt->irq != RTC_IRQ || !pt->priv) && pt_irq_masked(pt) &&
>> > + /* Level interrupts should be asserted even if masked. */
>> > + !pt->level )
>> >  {
>> >  /* suspend timer emulation */
>> 
>> Especially with this comment I'm not convinced this change is fully
>> correct: Once a level triggered interrupt is latched in IRR, no
>> further assertions are meaningful, and hence emulation could (and
>> hence should) still be stopped to reduce resource consumption.
> 
> Hm, I can see your point, but that's going to make the implementation
> of HPET level trigger interrupts more complex.
> 
> From my reading of the spec, when a level triggered HPET interrupt
> fires the ISR bit must be set, regardless of whether the IRR of the
> io-apic entry is set or not.
> 
> Maybe the right solution is to add a pt_irq_pending that checks the
> IRR bit, and a new flag that the caller can set in order to requests
> callbacks regardless of whether the interrupt has been injected or
> not. Would you agree to that plan?

That sounds like a reasonable option. Another would be to add a
parameter to the callback allowing the context to be identified to the
callee.

Jan



___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [linux-4.9 bisection] complete test-amd64-amd64-xl-qemut-ws16-amd64

2018-06-22 Thread osstest service owner
branch xen-unstable
xenbranch xen-unstable
job test-amd64-amd64-xl-qemut-ws16-amd64
testid xen-boot

Tree: linux 
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.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:  linux 
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
  Bug introduced:  bb70de1f993b5a7fffe9d42c68907b60ef5319a6
  Bug not present: 474928b8f0a6ba49872ef2769610b80638820aad
  Last fail repro: http://logs.test-lab.xenproject.org/osstest/logs/124608/


  commit bb70de1f993b5a7fffe9d42c68907b60ef5319a6
  Author: Juergen Gross 
  Date:   Wed May 30 13:09:57 2018 +0200
  
  xen: set cpu capabilities from xen_start_kernel()
  
  Upstream commit: 0808e80cb760de2733c0527d2090ed2205a1eef8 ("xen: set
  cpu capabilities from xen_start_kernel()")
  
  There is no need to set the same capabilities for each cpu
  individually. This can easily be done for all cpus when starting the
  kernel.
  
  Signed-off-by: Juergen Gross 
  Reviewed-by: Boris Ostrovsky 
  Signed-off-by: Greg Kroah-Hartman 


For bisection revision-tuple graph see:
   
http://logs.test-lab.xenproject.org/osstest/results/bisect/linux-4.9/test-amd64-amd64-xl-qemut-ws16-amd64.xen-boot.html
Revision IDs in each graph node refer, respectively, to the Trees above.


Running cs-bisection-step 
--graph-out=/home/logs/results/bisect/linux-4.9/test-amd64-amd64-xl-qemut-ws16-amd64.xen-boot
 --summary-out=tmp/124608.bisection-summary --basis-template=122969 
--blessings=real,real-bisect linux-4.9 test-amd64-amd64-xl-qemut-ws16-amd64 
xen-boot
Searching for failure / basis pass:
 124532 fail [host=godello1] / 123819 ok.
Failure / basis pass flights: 124532 / 123819
(tree with no url: minios)
(tree with no url: ovmf)
(tree with no url: seabios)
Tree: linux 
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.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 8e52b94e19d82e2be4f3bf3699c8f39f4c6cc478 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
11535cdbc0ae5925a55b3e735447c30faaa6f63b
Basis pass 2460c23c35e9a612395b4108dbc19f3c1f016d43 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
06f542f8f2e446c01bd0edab51e9450af7f6e05b
Generating revisions with ./adhoc-revtuple-generator  
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git#2460c23c35e9a612395b4108dbc19f3c1f016d43-8e52b94e19d82e2be4f3bf3699c8f39f4c6cc478
 
git://xenbits.xen.org/osstest/linux-firmware.git#c530a75c1e6a472b0eb9558310b518f0dfcd8860-c530a75c1e6a472b0eb9558310b518f0dfcd8860
 
git://xenbits.xen.org/qemu-xen-traditional.git#c8ea0457495342c417c3dc033bba25148b279f60-c8ea0457495342c417c3dc033bba25148b279f60
 
git://xenbits.xen.org/qemu-xen.git#43139135a8938de44f66333831d3a8655d07663a-43139135a8938de44f66333831d3a8655d07663a
 
git://xenbits.xen.org/xen.git#06f542f8f2e446c01bd0edab51e9450af7f6e05b-11535cdbc0ae5925a55b3e735447c30faaa6f63b
Loaded 2001 nodes in revision graph
Searching for test results:
 123819 pass 2460c23c35e9a612395b4108dbc19f3c1f016d43 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
06f542f8f2e446c01bd0edab51e9450af7f6e05b
 123861 fail irrelevant
 123970 fail irrelevant
 123914 fail irrelevant
 124033 fail irrelevant
 124055 fail irrelevant
 124084 fail 3c3d05fc6e6653bdf9f7fb3fb6922b199c7ba3ec 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
11535cdbc0ae5925a55b3e735447c30faaa6f63b
 124113 fail 3c3d05fc6e6653bdf9f7fb3fb6922b199c7ba3ec 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
11535cdbc0ae5925a55b3e735447c30faaa6f63b
 124190 fail 4f42dc62be92afe9863bf2598e6b0d637430f74f 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
11535cdbc0ae5925a55b3e735447c30faaa6f63b
 124168 fail 3c3d05fc6e6653bdf9f7fb3fb6922b199c7ba3ec 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a 
11535cdbc0ae5925a55b3e735447c30faaa6f63b
 124223 fail 4f42dc62be92afe9863bf2598e6b0d637430f74f 
c530a75c1e6a472b0eb9558310b518f0dfcd8860 
c8ea0457495342c417c3dc033bba25148b279f60 
43139135a8938de44f66333831d3a8655d07663a

Re: [Xen-devel] [PATCH v3 5/6] vpt: add support for level interrupts

2018-06-22 Thread Roger Pau Monné
On Fri, Jun 22, 2018 at 09:53:26AM -0600, Jan Beulich wrote:
> >>> On 22.06.18 at 17:24,  wrote:
> > On Fri, Jun 22, 2018 at 08:23:02AM -0600, Jan Beulich wrote:
> >> >>> On 08.06.18 at 17:07,  wrote:
> >> > @@ -316,7 +317,9 @@ int pt_update_irq(struct vcpu *v)
> >> >  if ( pt->pending_intr_nr )
> >> >  {
> >> >  /* RTC code takes care of disabling the timer itself. */
> >> > -if ( (pt->irq != RTC_IRQ || !pt->priv) && pt_irq_masked(pt) 
> >> > )
> >> > +if ( (pt->irq != RTC_IRQ || !pt->priv) && pt_irq_masked(pt) 
> >> > &&
> >> > + /* Level interrupts should be asserted even if masked. 
> >> > */
> >> > + !pt->level )
> >> >  {
> >> >  /* suspend timer emulation */
> >> 
> >> Especially with this comment I'm not convinced this change is fully
> >> correct: Once a level triggered interrupt is latched in IRR, no
> >> further assertions are meaningful, and hence emulation could (and
> >> hence should) still be stopped to reduce resource consumption.
> > 
> > Hm, I can see your point, but that's going to make the implementation
> > of HPET level trigger interrupts more complex.
> > 
> > From my reading of the spec, when a level triggered HPET interrupt
> > fires the ISR bit must be set, regardless of whether the IRR of the
> > io-apic entry is set or not.
> > 
> > Maybe the right solution is to add a pt_irq_pending that checks the
> > IRR bit, and a new flag that the caller can set in order to requests
> > callbacks regardless of whether the interrupt has been injected or
> > not. Would you agree to that plan?
> 
> That sounds like a reasonable option. Another would be to add a
> parameter to the callback allowing the context to be identified to the
> callee.

Yes, but that seems less optimal since all callback will be executed
and current callers would just exit if the interrupt was masked. I
will add the new option an send a new version.

Thanks, Roger.

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [Intel-gfx] [RFC PATCH] mm, oom: distinguish blockable mode for mmu notifiers

2018-06-22 Thread Michal Hocko
On Fri 22-06-18 16:36:49, Chris Wilson wrote:
> Quoting Michal Hocko (2018-06-22 16:02:42)
> > Hi,
> > this is an RFC and not tested at all. I am not very familiar with the
> > mmu notifiers semantics very much so this is a crude attempt to achieve
> > what I need basically. It might be completely wrong but I would like
> > to discuss what would be a better way if that is the case.
> > 
> > get_maintainers gave me quite large list of people to CC so I had to trim
> > it down. If you think I have forgot somebody, please let me know
> 
> > diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c 
> > b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > index 854bd51b9478..5285df9331fa 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_userptr.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > @@ -112,10 +112,11 @@ static void del_object(struct i915_mmu_object *mo)
> > mo->attached = false;
> >  }
> >  
> > -static void i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier 
> > *_mn,
> > +static int i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier 
> > *_mn,
> >struct mm_struct *mm,
> >unsigned long start,
> > -  unsigned long end)
> > +  unsigned long end,
> > +  bool blockable)
> >  {
> > struct i915_mmu_notifier *mn =
> > container_of(_mn, struct i915_mmu_notifier, mn);
> > @@ -124,7 +125,7 @@ static void 
> > i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
> > LIST_HEAD(cancelled);
> >  
> > if (RB_EMPTY_ROOT(&mn->objects.rb_root))
> > -   return;
> > +   return 0;
> 
> The principle wait here is for the HW (even after fixing all the locks
> to be not so coarse, we still have to wait for the HW to finish its
> access).

Is this wait bound or it can take basically arbitrary amount of time?

> The first pass would be then to not do anything here if
> !blockable.

something like this? (incremental diff)

diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c 
b/drivers/gpu/drm/i915/i915_gem_userptr.c
index 5285df9331fa..e9ed0d2cfabc 100644
--- a/drivers/gpu/drm/i915/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
@@ -122,6 +122,7 @@ static int 
i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
container_of(_mn, struct i915_mmu_notifier, mn);
struct i915_mmu_object *mo;
struct interval_tree_node *it;
+   int ret = 0;
LIST_HEAD(cancelled);
 
if (RB_EMPTY_ROOT(&mn->objects.rb_root))
@@ -133,6 +134,10 @@ static int 
i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
spin_lock(&mn->lock);
it = interval_tree_iter_first(&mn->objects, start, end);
while (it) {
+   if (!blockable) {
+   ret = -EAGAIN;
+   goto out_unlock;
+   }
/* The mmu_object is released late when destroying the
 * GEM object so it is entirely possible to gain a
 * reference on an object in the process of being freed
@@ -154,8 +159,10 @@ static int 
i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
spin_unlock(&mn->lock);
 
/* TODO: can we skip waiting here? */
-   if (!list_empty(&cancelled) && blockable)
+   if (!list_empty(&cancelled))
flush_workqueue(mn->wq);
+
+   return ret;
 }
 
 static const struct mmu_notifier_ops i915_gem_userptr_notifier = {
-- 
Michal Hocko
SUSE Labs

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v3 6/6] vhpet: add support for level triggered interrupts

2018-06-22 Thread Jan Beulich
>>> On 22.06.18 at 17:31,  wrote:
> On Fri, Jun 22, 2018 at 09:00:27AM -0600, Jan Beulich wrote:
>> >>> On 08.06.18 at 17:07,  wrote:
>> > --- a/xen/arch/x86/hvm/hpet.c
>> > +++ b/xen/arch/x86/hvm/hpet.c
>> > @@ -223,6 +223,17 @@ static void hpet_stop_timer(HPETState *h, unsigned 
>> > int 
> tn,
>> >  hpet_get_comparator(h, tn, guest_time);
>> >  }
>> >  
>> > +static void hpet_timer_fired(struct vcpu *v, void *data)
>> > +{
>> > +unsigned int tn = (unsigned int)data;
>> 
>> I don't think this cast will go through without warning on all gcc versions 
> we
>> care about.
> 
> Hm, should be casted to unsigned long I guess so it's the same size.
> 
>> > +HPETState *h = vcpu_vhpet(v);
>> > +
>> > +write_lock(&h->lock);
>> > +ASSERT(!test_bit(tn, &h->hpet.isr));
>> > +__set_bit(tn, &h->hpet.isr);
>> 
>> if ( __test_and_set_bit() )
>> ASSERT_UNREACHABLE();
>> 
>> ?
>> 
>> Seeing this I can understand why you want to call the callback the way
>> you do in the previous patch. I continue to be unconvinced this second
>> call is generally correct (and sufficient). Simply consider the RTC case,
>> where in theory the IRQ could also be level triggered.
> 
> See my reply to the other patch.
> 
>> > @@ -394,6 +411,32 @@ static int hpet_write(
>> >  }
>> >  break;
>> >  
>> > +case HPET_STATUS:
>> > +/* write 1 to clear. */
>> > +while ( new_val )
>> > +{
>> > +bool active;
>> > +
>> > +i = find_first_set_bit(new_val);
>> > +if ( i >= HPET_TIMER_NUM )
>> > +break;
>> > +__clear_bit(i, &new_val);
>> > +active = __test_and_clear_bit(i, &h->hpet.isr);
>> > +if ( active )
>> > +{
>> > +/*
>> > + * Should pt->irq better be used here in case the guest 
>> > changes
>> > + * the configured IRQ while it's active? Guest changing 
>> > the IRQ
>> > + * while the interrupt is active is not documented.
>> > + */
>> 
>> I think it's better the way you have it, to base things on what is recorded
>> in h->hpet.isr. After all that's what has been asserted. In fact I don't see
>> how using pt->irq would address the situation: Isn't it that what changes
>> first, and hence the de-assert done here would go out of sync with the
>> prior assert?
> 
> What's in the HPET state can be changed by guest writes,

Not exactly - the only way to modify h->hpet.isr is through the code above.

> so it might
> be more accurate to use pt->irq, which is the IRQ that was asserted by
> the vpt code.

I.e. I'm viewing it exactly the other way around - the guest can affect
pt->irq directly.

>> > +hvm_ioapic_deassert(v->domain, timer_int_route(h, i));
>> > +if ( hpet_enabled(h) && timer_enabled(h, i) &&
>> > + timer_level(h, i) && timer_is_periodic(h, i) )
>> > +set_start_timer(i);
>> > +}
>> > +}
>> > +break;
>> 
>> What I'm wondering though: Does there really need to be a loop here?
>> How would more than one bit get set in h->hpet.isr?
> 
> The current HPET code exposes 3 timers, and all of them can be set to
> level triggered, so in theory you could clear the 3 ISR bits with one
> write, hence the loop.

Oh, right, I was mislead by the comment above saying pt->irq when you
really mean pt[tn].irq

Jan



___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v3 6/6] vhpet: add support for level triggered interrupts

2018-06-22 Thread Roger Pau Monné
On Fri, Jun 22, 2018 at 10:00:41AM -0600, Jan Beulich wrote:
> >>> On 22.06.18 at 17:31,  wrote:
> > On Fri, Jun 22, 2018 at 09:00:27AM -0600, Jan Beulich wrote:
> >> >>> On 08.06.18 at 17:07,  wrote:
> >> > --- a/xen/arch/x86/hvm/hpet.c
> >> > +++ b/xen/arch/x86/hvm/hpet.c
> >> > @@ -223,6 +223,17 @@ static void hpet_stop_timer(HPETState *h, unsigned 
> >> > int 
> > tn,
> >> >  hpet_get_comparator(h, tn, guest_time);
> >> >  }
> >> >  
> >> > +static void hpet_timer_fired(struct vcpu *v, void *data)
> >> > +{
> >> > +unsigned int tn = (unsigned int)data;
> >> 
> >> I don't think this cast will go through without warning on all gcc 
> >> versions 
> > we
> >> care about.
> > 
> > Hm, should be casted to unsigned long I guess so it's the same size.
> > 
> >> > +HPETState *h = vcpu_vhpet(v);
> >> > +
> >> > +write_lock(&h->lock);
> >> > +ASSERT(!test_bit(tn, &h->hpet.isr));
> >> > +__set_bit(tn, &h->hpet.isr);
> >> 
> >> if ( __test_and_set_bit() )
> >> ASSERT_UNREACHABLE();
> >> 
> >> ?
> >> 
> >> Seeing this I can understand why you want to call the callback the way
> >> you do in the previous patch. I continue to be unconvinced this second
> >> call is generally correct (and sufficient). Simply consider the RTC case,
> >> where in theory the IRQ could also be level triggered.
> > 
> > See my reply to the other patch.
> > 
> >> > @@ -394,6 +411,32 @@ static int hpet_write(
> >> >  }
> >> >  break;
> >> >  
> >> > +case HPET_STATUS:
> >> > +/* write 1 to clear. */
> >> > +while ( new_val )
> >> > +{
> >> > +bool active;
> >> > +
> >> > +i = find_first_set_bit(new_val);
> >> > +if ( i >= HPET_TIMER_NUM )
> >> > +break;
> >> > +__clear_bit(i, &new_val);
> >> > +active = __test_and_clear_bit(i, &h->hpet.isr);
> >> > +if ( active )
> >> > +{
> >> > +/*
> >> > + * Should pt->irq better be used here in case the guest 
> >> > changes
> >> > + * the configured IRQ while it's active? Guest changing 
> >> > the IRQ
> >> > + * while the interrupt is active is not documented.
> >> > + */
> >> 
> >> I think it's better the way you have it, to base things on what is recorded
> >> in h->hpet.isr. After all that's what has been asserted. In fact I don't 
> >> see
> >> how using pt->irq would address the situation: Isn't it that what changes
> >> first, and hence the de-assert done here would go out of sync with the
> >> prior assert?
> > 
> > What's in the HPET state can be changed by guest writes,
> 
> Not exactly - the only way to modify h->hpet.isr is through the code above.

Right, but ISR only signals which timer has fired, not which IRQ the
timer was using. That's stored in pt->irq or h->tn[n].irq, and it's
what Xen needs in order to perform the deassert.

Roger.

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [Intel-gfx] [RFC PATCH] mm, oom: distinguish blockable mode for mmu notifiers

2018-06-22 Thread Jerome Glisse
On Fri, Jun 22, 2018 at 05:57:16PM +0200, Michal Hocko wrote:
> On Fri 22-06-18 16:36:49, Chris Wilson wrote:
> > Quoting Michal Hocko (2018-06-22 16:02:42)
> > > Hi,
> > > this is an RFC and not tested at all. I am not very familiar with the
> > > mmu notifiers semantics very much so this is a crude attempt to achieve
> > > what I need basically. It might be completely wrong but I would like
> > > to discuss what would be a better way if that is the case.
> > > 
> > > get_maintainers gave me quite large list of people to CC so I had to trim
> > > it down. If you think I have forgot somebody, please let me know
> > 
> > > diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c 
> > > b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > index 854bd51b9478..5285df9331fa 100644
> > > --- a/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > @@ -112,10 +112,11 @@ static void del_object(struct i915_mmu_object *mo)
> > > mo->attached = false;
> > >  }
> > >  
> > > -static void i915_gem_userptr_mn_invalidate_range_start(struct 
> > > mmu_notifier *_mn,
> > > +static int i915_gem_userptr_mn_invalidate_range_start(struct 
> > > mmu_notifier *_mn,
> > >struct mm_struct 
> > > *mm,
> > >unsigned long 
> > > start,
> > > -  unsigned long end)
> > > +  unsigned long end,
> > > +  bool blockable)
> > >  {
> > > struct i915_mmu_notifier *mn =
> > > container_of(_mn, struct i915_mmu_notifier, mn);
> > > @@ -124,7 +125,7 @@ static void 
> > > i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
> > > LIST_HEAD(cancelled);
> > >  
> > > if (RB_EMPTY_ROOT(&mn->objects.rb_root))
> > > -   return;
> > > +   return 0;
> > 
> > The principle wait here is for the HW (even after fixing all the locks
> > to be not so coarse, we still have to wait for the HW to finish its
> > access).
> 
> Is this wait bound or it can take basically arbitrary amount of time?

Arbitrary amount of time but in desktop use case you can assume that
it should never go above 16ms for a 60frame per second rendering of
your desktop (in GPU compute case this kind of assumption does not
hold). Is the process exit_state already updated by the time this mmu
notifier callbacks happen ?

> 
> > The first pass would be then to not do anything here if
> > !blockable.
> 
> something like this? (incremental diff)

What i wanted to do with HMM and mmu notifier is split the invalidation
in 2 pass. First pass tell the drivers to stop/cancel pending jobs that
depends on the range and invalidate internal driver states (like clear
buffer object pages array in case of GPU but not GPU page table). While
the second callback would do the actual wait on the GPU to be done and
update the GPU page table.

Now in this scheme in case the task is already in some exit state and
that all CPU threads are frozen/kill then we can probably find a way to
do the first path mostly lock less. AFAICR nor AMD nor Intel allow to
share userptr bo hence a uptr bo should only ever be access through
ioctl submited by the process.

The second call can then be delayed and ping from time to time to see
if GPU jobs are done.


Note that what you propose might still be useful as in case there is
no buffer object for a range then OOM can make progress in freeing a
range of memory. It is very likely that significant virtual address
range of a process and backing memory can be reclaim that way. This
assume OOM reclaim vma by vma or in some form of granularity like
reclaiming 1GB by 1GB. Or we could also update blocking callback to
return range that are blocking that way OOM can reclaim around.

Cheers,
Jérôme

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [Intel-gfx] [RFC PATCH] mm, oom: distinguish blockable mode for mmu notifiers

2018-06-22 Thread Michal Hocko
[Hmm, the cc list got mangled somehow - you have just made many people
to work for suse ;) and to kvack.org in the preious one - fixed up
hopefully]

On Fri 22-06-18 17:07:21, Chris Wilson wrote:
> Quoting Michal Hocko (2018-06-22 16:57:16)
> > On Fri 22-06-18 16:36:49, Chris Wilson wrote:
> > > Quoting Michal Hocko (2018-06-22 16:02:42)
> > > > Hi,
> > > > this is an RFC and not tested at all. I am not very familiar with the
> > > > mmu notifiers semantics very much so this is a crude attempt to achieve
> > > > what I need basically. It might be completely wrong but I would like
> > > > to discuss what would be a better way if that is the case.
> > > > 
> > > > get_maintainers gave me quite large list of people to CC so I had to 
> > > > trim
> > > > it down. If you think I have forgot somebody, please let me know
> > > 
> > > > diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c 
> > > > b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > > index 854bd51b9478..5285df9331fa 100644
> > > > --- a/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > > +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > > @@ -112,10 +112,11 @@ static void del_object(struct i915_mmu_object *mo)
> > > > mo->attached = false;
> > > >  }
> > > >  
> > > > -static void i915_gem_userptr_mn_invalidate_range_start(struct 
> > > > mmu_notifier *_mn,
> > > > +static int i915_gem_userptr_mn_invalidate_range_start(struct 
> > > > mmu_notifier *_mn,
> > > >struct mm_struct 
> > > > *mm,
> > > >unsigned long 
> > > > start,
> > > > -  unsigned long 
> > > > end)
> > > > +  unsigned long 
> > > > end,
> > > > +  bool blockable)
> > > >  {
> > > > struct i915_mmu_notifier *mn =
> > > > container_of(_mn, struct i915_mmu_notifier, mn);
> > > > @@ -124,7 +125,7 @@ static void 
> > > > i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
> > > > LIST_HEAD(cancelled);
> > > >  
> > > > if (RB_EMPTY_ROOT(&mn->objects.rb_root))
> > > > -   return;
> > > > +   return 0;
> > > 
> > > The principle wait here is for the HW (even after fixing all the locks
> > > to be not so coarse, we still have to wait for the HW to finish its
> > > access).
> > 
> > Is this wait bound or it can take basically arbitrary amount of time?
> 
> Arbitrary. It waits for the last operation in the queue that needs that
> set of backing pages, and that queue is unbounded and not even confined
> to the local driver. (Though each operation should be bounded to be
> completed within an interval or be cancelled, that interval is on the
> order of 10s!)

OK, I see. We should rather not wait that long so backoff is just
better. The whole point of the oom_reaper is to tear down and free some
memory. We do not really need to reclaim all of it.

It would be great if we could do something like - kick the tear down of
the device memory but have it done in the background. We wouldn't tear
the vma down in that case but the whole process would start at least.
I am not sure something like that is possible.
 
> > > The first pass would be then to not do anything here if
> > > !blockable.
> > 
> > something like this? (incremental diff)
> 
> Yup.

Cool, I will start with that because even that is an improvement from
the oom_reaper POV.

Thanks!
-- 
Michal Hocko
SUSE Labs

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [Intel-gfx] [RFC PATCH] mm, oom: distinguish blockable mode for mmu notifiers

2018-06-22 Thread Michal Hocko
[Resnding with the CC list fixed]

On Fri 22-06-18 18:40:26, Michal Hocko wrote:
> On Fri 22-06-18 12:18:46, Jerome Glisse wrote:
> > On Fri, Jun 22, 2018 at 05:57:16PM +0200, Michal Hocko wrote:
> > > On Fri 22-06-18 16:36:49, Chris Wilson wrote:
> > > > Quoting Michal Hocko (2018-06-22 16:02:42)
> > > > > Hi,
> > > > > this is an RFC and not tested at all. I am not very familiar with the
> > > > > mmu notifiers semantics very much so this is a crude attempt to 
> > > > > achieve
> > > > > what I need basically. It might be completely wrong but I would like
> > > > > to discuss what would be a better way if that is the case.
> > > > > 
> > > > > get_maintainers gave me quite large list of people to CC so I had to 
> > > > > trim
> > > > > it down. If you think I have forgot somebody, please let me know
> > > > 
> > > > > diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c 
> > > > > b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > > > index 854bd51b9478..5285df9331fa 100644
> > > > > --- a/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > > > +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > > > @@ -112,10 +112,11 @@ static void del_object(struct i915_mmu_object 
> > > > > *mo)
> > > > > mo->attached = false;
> > > > >  }
> > > > >  
> > > > > -static void i915_gem_userptr_mn_invalidate_range_start(struct 
> > > > > mmu_notifier *_mn,
> > > > > +static int i915_gem_userptr_mn_invalidate_range_start(struct 
> > > > > mmu_notifier *_mn,
> > > > >struct 
> > > > > mm_struct *mm,
> > > > >unsigned long 
> > > > > start,
> > > > > -  unsigned long 
> > > > > end)
> > > > > +  unsigned long 
> > > > > end,
> > > > > +  bool blockable)
> > > > >  {
> > > > > struct i915_mmu_notifier *mn =
> > > > > container_of(_mn, struct i915_mmu_notifier, mn);
> > > > > @@ -124,7 +125,7 @@ static void 
> > > > > i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
> > > > > LIST_HEAD(cancelled);
> > > > >  
> > > > > if (RB_EMPTY_ROOT(&mn->objects.rb_root))
> > > > > -   return;
> > > > > +   return 0;
> > > > 
> > > > The principle wait here is for the HW (even after fixing all the locks
> > > > to be not so coarse, we still have to wait for the HW to finish its
> > > > access).
> > > 
> > > Is this wait bound or it can take basically arbitrary amount of time?
> > 
> > Arbitrary amount of time but in desktop use case you can assume that
> > it should never go above 16ms for a 60frame per second rendering of
> > your desktop (in GPU compute case this kind of assumption does not
> > hold). Is the process exit_state already updated by the time this mmu
> > notifier callbacks happen ?
> 
> What do you mean? The process is killed (by SIGKILL) at the time but we
> do not know much more than that. The task might be stuck anywhere in the
> kernel before handling that signal.
> 
> > > > The first pass would be then to not do anything here if
> > > > !blockable.
> > > 
> > > something like this? (incremental diff)
> > 
> > What i wanted to do with HMM and mmu notifier is split the invalidation
> > in 2 pass. First pass tell the drivers to stop/cancel pending jobs that
> > depends on the range and invalidate internal driver states (like clear
> > buffer object pages array in case of GPU but not GPU page table). While
> > the second callback would do the actual wait on the GPU to be done and
> > update the GPU page table.
> 
> What can you do after the first phase? Can I unmap the range?
> 
> > Now in this scheme in case the task is already in some exit state and
> > that all CPU threads are frozen/kill then we can probably find a way to
> > do the first path mostly lock less. AFAICR nor AMD nor Intel allow to
> > share userptr bo hence a uptr bo should only ever be access through
> > ioctl submited by the process.
> > 
> > The second call can then be delayed and ping from time to time to see
> > if GPU jobs are done.
> > 
> > 
> > Note that what you propose might still be useful as in case there is
> > no buffer object for a range then OOM can make progress in freeing a
> > range of memory. It is very likely that significant virtual address
> > range of a process and backing memory can be reclaim that way. This
> > assume OOM reclaim vma by vma or in some form of granularity like
> > reclaiming 1GB by 1GB. Or we could also update blocking callback to
> > return range that are blocking that way OOM can reclaim around.
> 
> Exactly my point. What we have right now is all or nothing which is
> obviously too coarse to be useful.

-- 
Michal Hocko
SUSE Labs

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailma

Re: [Xen-devel] [PATCH V2 2/2] x86/altp2m: Fixed domain crash with INVALID_ALTP2M EPTP index

2018-06-22 Thread Razvan Cojocaru
On 06/22/2018 06:28 PM, Jan Beulich wrote:
 On 13.06.18 at 10:52,  wrote:
>> --- a/xen/arch/x86/hvm/vmx/vmx.c
>> +++ b/xen/arch/x86/hvm/vmx/vmx.c
>> @@ -3592,7 +3592,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
>>  }
>>  }
>>  
>> -if ( idx != vcpu_altp2m(v).p2midx )
>> +if ( idx != INVALID_ALTP2M && idx != vcpu_altp2m(v).p2midx )
>>  {
>>  BUG_ON(idx >= MAX_ALTP2M);
> 
> In the code immediately ahead of this there is an INVALID_ALTP2M check
> already (in the else branch). If the __vmread() can legitimately produce
> this value, why would the domain be crashed when getting back
> INVALID_ALTP2M in the other case? I think the correctness of your change
> can only be judged once both code paths behave consistently.

You're right, I had somehow convinced myself that this is a #VE-specific
problem, but it looks like a generic altp2m problem. I'll simulate the
other branch in the code and see what it does with my small test
application.


Thanks,
Razvan

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [Intel-gfx] [RFC PATCH] mm, oom: distinguish blockable mode for mmu notifiers

2018-06-22 Thread Jerome Glisse
On Fri, Jun 22, 2018 at 06:42:43PM +0200, Michal Hocko wrote:
> [Resnding with the CC list fixed]
> 
> On Fri 22-06-18 18:40:26, Michal Hocko wrote:
> > On Fri 22-06-18 12:18:46, Jerome Glisse wrote:
> > > On Fri, Jun 22, 2018 at 05:57:16PM +0200, Michal Hocko wrote:
> > > > On Fri 22-06-18 16:36:49, Chris Wilson wrote:
> > > > > Quoting Michal Hocko (2018-06-22 16:02:42)
> > > > > > Hi,
> > > > > > this is an RFC and not tested at all. I am not very familiar with 
> > > > > > the
> > > > > > mmu notifiers semantics very much so this is a crude attempt to 
> > > > > > achieve
> > > > > > what I need basically. It might be completely wrong but I would like
> > > > > > to discuss what would be a better way if that is the case.
> > > > > > 
> > > > > > get_maintainers gave me quite large list of people to CC so I had 
> > > > > > to trim
> > > > > > it down. If you think I have forgot somebody, please let me know
> > > > > 
> > > > > > diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c 
> > > > > > b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > > > > index 854bd51b9478..5285df9331fa 100644
> > > > > > --- a/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > > > > +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
> > > > > > @@ -112,10 +112,11 @@ static void del_object(struct i915_mmu_object 
> > > > > > *mo)
> > > > > > mo->attached = false;
> > > > > >  }
> > > > > >  
> > > > > > -static void i915_gem_userptr_mn_invalidate_range_start(struct 
> > > > > > mmu_notifier *_mn,
> > > > > > +static int i915_gem_userptr_mn_invalidate_range_start(struct 
> > > > > > mmu_notifier *_mn,
> > > > > >struct 
> > > > > > mm_struct *mm,
> > > > > >unsigned 
> > > > > > long start,
> > > > > > -  unsigned 
> > > > > > long end)
> > > > > > +  unsigned 
> > > > > > long end,
> > > > > > +  bool 
> > > > > > blockable)
> > > > > >  {
> > > > > > struct i915_mmu_notifier *mn =
> > > > > > container_of(_mn, struct i915_mmu_notifier, mn);
> > > > > > @@ -124,7 +125,7 @@ static void 
> > > > > > i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
> > > > > > LIST_HEAD(cancelled);
> > > > > >  
> > > > > > if (RB_EMPTY_ROOT(&mn->objects.rb_root))
> > > > > > -   return;
> > > > > > +   return 0;
> > > > > 
> > > > > The principle wait here is for the HW (even after fixing all the locks
> > > > > to be not so coarse, we still have to wait for the HW to finish its
> > > > > access).
> > > > 
> > > > Is this wait bound or it can take basically arbitrary amount of time?
> > > 
> > > Arbitrary amount of time but in desktop use case you can assume that
> > > it should never go above 16ms for a 60frame per second rendering of
> > > your desktop (in GPU compute case this kind of assumption does not
> > > hold). Is the process exit_state already updated by the time this mmu
> > > notifier callbacks happen ?
> > 
> > What do you mean? The process is killed (by SIGKILL) at the time but we
> > do not know much more than that. The task might be stuck anywhere in the
> > kernel before handling that signal.

I was wondering if another thread might still be dereferencing any of
the structure concurrently with the OOM mmu notifier callback. Saddly
yes, it would be simpler if we could make such assumption.

> > 
> > > > > The first pass would be then to not do anything here if
> > > > > !blockable.
> > > > 
> > > > something like this? (incremental diff)
> > > 
> > > What i wanted to do with HMM and mmu notifier is split the invalidation
> > > in 2 pass. First pass tell the drivers to stop/cancel pending jobs that
> > > depends on the range and invalidate internal driver states (like clear
> > > buffer object pages array in case of GPU but not GPU page table). While
> > > the second callback would do the actual wait on the GPU to be done and
> > > update the GPU page table.
> > 
> > What can you do after the first phase? Can I unmap the range?

No you can't do anything but this force synchronization as any other
thread that concurrently trie to do something with those would queue
up. So it would serialize thing. Also main motivation on my side is
multi-GPU, right now multi-GPU are not that common but this is changing
quickly and what we see on high end (4, 8 or 16 GPUs per socket) is
spreading into more configurations. Here in mutli GPU case splitting
in two would avoid having to fully wait on first GPU before trying to
invaidate on second GPU, so on and so forth.

> > 
> > > Now in this scheme in case the task is already in some exit state and
> > > that all CPU threads are frozen/kill then we can probably find a way to
> > > do the first path mostly lock less. AFAICR nor AMD nor Intel allow to
> > > s

[Xen-devel] [seabios baseline-only test] 74899: tolerable FAIL

2018-06-22 Thread Platform Team regression test user
This run is configured for baseline tests only.

flight 74899 seabios real [real]
http://osstest.xs.citrite.net/~osstest/testlogs/logs/74899/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-i386-xl-qemuu-win10-i386 10 windows-install  fail baseline untested
 test-amd64-amd64-qemuu-nested-intel 14 xen-boot/l1  fail baseline untested
 test-amd64-i386-xl-qemuu-win7-amd64 17 guest-stop   fail baseline untested
 test-amd64-amd64-xl-qemuu-win7-amd64 17 guest-stop  fail baseline untested
 test-amd64-amd64-xl-qemuu-ws16-amd64 10 windows-installfail never pass
 test-amd64-i386-xl-qemuu-ws16-amd64 10 windows-install fail never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-amd64-amd64-qemuu-nested-amd 17 debian-hvm-install/l1/l2  fail never pass
 test-amd64-amd64-xl-qemuu-win10-i386 17 guest-stop fail never pass

version targeted for testing:
 seabios  237fd3943d18d7d1a4c44aa2402c26fa62e7c380
baseline version:
 seabios  d1343e6863dd287ce7d4fcb5169c9cff568f9d1b

Last test of basis74586  2018-04-13 03:22:28 Z   70 days
Testing same since74899  2018-06-22 06:01:38 Z0 days1 attempts


People who touched revisions under test:
  Kevin O'Connor 

jobs:
 build-amd64-xsm  pass
 build-i386-xsm   pass
 build-amd64  pass
 build-i386   pass
 build-amd64-libvirt  pass
 build-i386-libvirt   pass
 build-amd64-pvopspass
 build-i386-pvops pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm   pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsmpass
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-xsmpass
 test-amd64-i386-xl-qemuu-debianhvm-amd64-xsm pass
 test-amd64-amd64-qemuu-nested-amdfail
 test-amd64-i386-qemuu-rhel6hvm-amd   pass
 test-amd64-amd64-xl-qemuu-debianhvm-amd64pass
 test-amd64-i386-xl-qemuu-debianhvm-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-win10-i386 fail
 test-amd64-i386-xl-qemuu-win10-i386  fail
 test-amd64-amd64-qemuu-nested-intel  fail
 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.xs.citrite.net
logs: /home/osstest/logs
images: /home/osstest/images

Logs, config files, etc. are available at
http://osstest.xs.citrite.net/~osstest/testlogs/logs

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


Push not applicable.


commit 237fd3943d18d7d1a4c44aa2402c26fa62e7c380
Author: Kevin O'Connor 
Date:   Mon Jun 11 12:05:31 2018 -0400

docs: Update Download.md to use git clone via https

Signed-off-by: Kevin O'Connor 

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [distros-debian-jessie test] 74900: tolerable FAIL

2018-06-22 Thread Platform Team regression test user
flight 74900 distros-debian-jessie real [real]
http://osstest.xs.citrite.net/~osstest/testlogs/logs/74900/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-armhf-jessie-netboot-pygrub 10 debian-di-install fail like 
74872

baseline version:
 flight   74872

jobs:
 build-amd64  pass
 build-armhf  pass
 build-i386   pass
 build-amd64-pvopspass
 build-armhf-pvopspass
 build-i386-pvops pass
 test-amd64-amd64-amd64-jessie-netboot-pvgrub pass
 test-amd64-i386-i386-jessie-netboot-pvgrub   pass
 test-amd64-i386-amd64-jessie-netboot-pygrub  pass
 test-armhf-armhf-armhf-jessie-netboot-pygrub fail
 test-amd64-amd64-i386-jessie-netboot-pygrub  pass



sg-report-flight on osstest.xs.citrite.net
logs: /home/osstest/logs
images: /home/osstest/images

Logs, config files, etc. are available at
http://osstest.xs.citrite.net/~osstest/testlogs/logs

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


Push not applicable.


___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [ovmf test] 124571: all pass - PUSHED

2018-06-22 Thread osstest service owner
flight 124571 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/124571/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 ovmf 8e586296c114f630188cfe4c76df91a1e2b7a5b2
baseline version:
 ovmf 855abe0204cb932c8059a573a06a59ddc714ca49

Last test of basis   124466  2018-06-20 23:11:35 Z1 days
Failing since124515  2018-06-21 13:20:08 Z1 days2 attempts
Testing same since   124571  2018-06-22 02:40:38 Z0 days1 attempts


People who touched revisions under test:
  Ard Biesheuvel 
  Chris Co 
  Christopher Co 
  Dandan Bi 
  Fu Siyuan 
  Ruiyu Ni 
  Sami Mujawar 
  Sivaraman Nainar 

jobs:
 build-amd64-xsm  pass
 build-i386-xsm   pass
 build-amd64  pass
 build-i386   pass
 build-amd64-libvirt  pass
 build-i386-libvirt   pass
 build-amd64-pvopspass
 build-i386-pvops pass
 test-amd64-amd64-xl-qemuu-ovmf-amd64 pass
 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
   855abe0204..8e586296c1  8e586296c114f630188cfe4c76df91a1e2b7a5b2 -> 
xen-tested-master

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [ovmf baseline-only test] 74901: all pass

2018-06-22 Thread Platform Team regression test user
This run is configured for baseline tests only.

flight 74901 ovmf real [real]
http://osstest.xs.citrite.net/~osstest/testlogs/logs/74901/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 ovmf 8e586296c114f630188cfe4c76df91a1e2b7a5b2
baseline version:
 ovmf 855abe0204cb932c8059a573a06a59ddc714ca49

Last test of basis74894  2018-06-21 13:20:08 Z1 days
Testing same since74901  2018-06-22 18:52:42 Z0 days1 attempts


People who touched revisions under test:
  Ard Biesheuvel 
  Chris Co 
  Christopher Co 
  Dandan Bi 
  Fu Siyuan 
  Ruiyu Ni 
  Sami Mujawar 
  Sivaraman Nainar 

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



sg-report-flight on osstest.xs.citrite.net
logs: /home/osstest/logs
images: /home/osstest/images

Logs, config files, etc. are available at
http://osstest.xs.citrite.net/~osstest/testlogs/logs

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


Push not applicable.


commit 8e586296c114f630188cfe4c76df91a1e2b7a5b2
Author: Chris Co 
Date:   Fri Apr 13 23:43:27 2018 +

ArmPkg/ArmMmuLib ARM: fix Mva to use idx instead of table base

Mva address calculation should use the left-shifted current
section index instead of the left-shifted table base address.

Using the table base address here has the side-effect of potentially
causing an access violation depending on the base address value.

Cc: Leif Lindholm 
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Christopher Co 
Reviewed-by: Ard Biesheuvel 

commit 6e275c613e15ffc6dc79901fb244e8cb20af9948
Author: Ard Biesheuvel 
Date:   Thu Jun 21 09:17:52 2018 +0200

ArmPkg/ArmMmuLib ARM: assume page tables are in writeback cacheable memory

Given that these days, our ARM port only supports ARMv7 and later, we
can assume that the page table walker's memory accesses are cache
coherent, and so there is no need to perform cache maintenance. It
does require the page tables themselves to reside in memory mapped as
writeback cacheable so ASSERT() that this is the case.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel 
Reviewed-by: Leif Lindholm 

commit 713aea34864ce5fc0a248b85bf3caa64fcf22467
Author: Ard Biesheuvel 
Date:   Wed Jun 20 21:01:52 2018 +0200

ArmPkg/ArmMmuLib ARM: remove cache maintenance of block mapping contents

Peculiarly enough, the current page table manipulation code takes it
upon itself to write back and invalidate the memory contents covered
by page and section mappings when their memory attributes change. It
is not generally the case that data must be written back when such a
change occurs, even when switching from cacheable to non-cacheable
attributes, and in some cases, it is actually causing problems. (The
cache maintenance is also performed on the PCIe MMIO regions as they
get mapped by the PCI bus driver, and under virtualization, each
cache maintenance operation on an emulated MMIO region triggers a
round trip to the host and back)

So let's just drop this code.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel 
Reviewed-by: Leif Lindholm 

commit c2d6e2bc12b2a4e99304a1ebbc3474638721f5a8
Author: Ruiyu Ni 
Date:   Thu Jun 14 13:55:21 2018 +0800

ShellPkg/comp: return NOT_EQUAL when compared files are different

Today's implementation returns 0 even when compared files are
different.
The patch returns 27 (SHELL_NOT_QUAL) in such case to follow
the shell spec.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni 
Reviewed-by: Jaben Carsey 

commit 2e1083038d9aa74fcaa2db8158fdee7c8b4af3bb
Author: Dandan Bi 
Date:   Tue Jun 19 15:38:47 2018 +0800

SignedCapsulePkg/SystemFirmwareUpdateDxe: Fix ECC issues

Make function comments align with functions.

Cc: Star Zeng 
Cc: Michael D Kinney 
Cc: Jiewen Yao 
 

[Xen-devel] [xen-4.6-testing test] 124551: tolerable FAIL - PUSHED

2018-06-22 Thread osstest service owner
flight 124551 xen-4.6-testing real [real]
http://logs.test-lab.xenproject.org/osstest/logs/124551/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 16 guest-localmigrate/x10 
fail in 124469 pass in 124551
 test-amd64-amd64-libvirt-pair 22 guest-migrate/src_host/dst_host fail pass in 
124469

Tests which did not succeed, but are not blocking:
 test-xtf-amd64-amd64-5 50 xtf/test-hvm64-lbr-tsx-vmentry fail in 124469 like 
123907
 test-amd64-i386-libvirt-pair 22 guest-migrate/src_host/dst_host fail like 
123907
 test-amd64-i386-xl-qemuu-win7-amd64 17 guest-stop fail like 123907
 test-armhf-armhf-libvirt-xsm 14 saverestore-support-checkfail  like 123907
 test-amd64-amd64-xl-qemut-win7-amd64 17 guest-stopfail like 123907
 test-armhf-armhf-libvirt 14 saverestore-support-checkfail  like 123907
 test-amd64-amd64-xl-qemuu-win7-amd64 17 guest-stopfail like 123907
 test-armhf-armhf-libvirt-raw 13 saverestore-support-checkfail  like 123907
 test-amd64-i386-xl-qemut-win7-amd64 17 guest-stop fail like 123907
 test-armhf-armhf-xl-rtds 16 guest-start/debian.repeatfail  like 123907
 test-amd64-i386-xl-qemut-ws16-amd64 17 guest-stop fail like 123907
 test-xtf-amd64-amd64-4   37 xtf/test-hvm32pae-memop-seg  fail   never pass
 test-xtf-amd64-amd64-1   37 xtf/test-hvm32pae-memop-seg  fail   never pass
 test-xtf-amd64-amd64-4   52 xtf/test-hvm64-memop-seg fail   never pass
 test-xtf-amd64-amd64-2   37 xtf/test-hvm32pae-memop-seg  fail   never pass
 test-xtf-amd64-amd64-1   52 xtf/test-hvm64-memop-seg fail   never pass
 test-xtf-amd64-amd64-4   77 xtf/test-pv32pae-xsa-194 fail   never pass
 test-xtf-amd64-amd64-2   52 xtf/test-hvm64-memop-seg fail   never pass
 test-xtf-amd64-amd64-1   77 xtf/test-pv32pae-xsa-194 fail   never pass
 test-xtf-amd64-amd64-2   77 xtf/test-pv32pae-xsa-194 fail   never pass
 test-xtf-amd64-amd64-3   37 xtf/test-hvm32pae-memop-seg  fail   never pass
 test-xtf-amd64-amd64-5   37 xtf/test-hvm32pae-memop-seg  fail   never pass
 test-xtf-amd64-amd64-3   52 xtf/test-hvm64-memop-seg fail   never pass
 test-amd64-i386-libvirt  13 migrate-support-checkfail   never pass
 test-amd64-i386-libvirt-xsm  13 migrate-support-checkfail   never pass
 test-xtf-amd64-amd64-5   52 xtf/test-hvm64-memop-seg fail   never pass
 test-xtf-amd64-amd64-3   77 xtf/test-pv32pae-xsa-194 fail   never pass
 test-xtf-amd64-amd64-5   77 xtf/test-pv32pae-xsa-194 fail   never pass
 test-amd64-amd64-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt 13 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-amd64-amd64-qemuu-nested-amd 17 debian-hvm-install/l1/l2  fail never pass
 test-amd64-amd64-libvirt-vhd 12 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-xsm  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-xsm  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-multivcpu 13 migrate-support-checkfail  never pass
 test-armhf-armhf-xl-multivcpu 14 saverestore-support-checkfail  never pass
 test-armhf-armhf-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-cubietruck 13 migrate-support-checkfail never pass
 test-armhf-armhf-xl-cubietruck 14 saverestore-support-checkfail never pass
 test-armhf-armhf-libvirt 13 migrate-support-checkfail   never pass
 test-armhf-armhf-libvirt-raw 12 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-vhd  12 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-vhd  13 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  14 saverestore-support-checkfail   never pass
 test-amd64-amd64-xl-qemuu-ws16-amd64 17 guest-stop fail never pass
 test-amd64-i386-xl-qemuu-ws16-amd64 17 guest-stop  fail never pass
 test-amd64-amd64-xl-qemut-ws16-amd64 17 guest-stop fail never pass
 test-armhf-armhf-xl-rtds 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 14 saverestore-support-checkfail   never pass
 test-amd64-i386-xl-qemut-win10-i386 10 wind

[Xen-devel] [seabios test] 124585: regressions - FAIL

2018-06-22 Thread osstest service owner
flight 124585 seabios real [real]
http://logs.test-lab.xenproject.org/osstest/logs/124585/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-i386-libvirt6 libvirt-buildfail REGR. vs. 124521

Tests which did not succeed, but are not blocking:
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 1 build-check(1) blocked n/a
 test-amd64-i386-xl-qemuu-win7-amd64 17 guest-stop fail like 124521
 test-amd64-amd64-xl-qemuu-ws16-amd64 17 guest-stopfail like 124521
 test-amd64-amd64-xl-qemuu-win7-amd64 17 guest-stopfail like 124521
 test-amd64-i386-xl-qemuu-ws16-amd64 17 guest-stop fail like 124521
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 10 debian-hvm-install 
fail never pass
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 10 debian-hvm-install 
fail never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-amd64-amd64-qemuu-nested-amd 17 debian-hvm-install/l1/l2  fail never pass
 test-amd64-i386-xl-qemuu-win10-i386 10 windows-install fail never pass
 test-amd64-amd64-xl-qemuu-win10-i386 10 windows-installfail never pass

version targeted for testing:
 seabios  d9a8b867a3af8090290b69b8f94b24e7fba9e504
baseline version:
 seabios  237fd3943d18d7d1a4c44aa2402c26fa62e7c380

Last test of basis   124521  2018-06-21 14:40:20 Z1 days
Testing same since   124585  2018-06-22 06:10:18 Z0 days1 attempts


People who touched revisions under test:
  Gerd Hoffmann 

jobs:
 build-amd64-xsm  pass
 build-i386-xsm   pass
 build-amd64  pass
 build-i386   pass
 build-amd64-libvirt  pass
 build-i386-libvirt   fail
 build-amd64-pvopspass
 build-i386-pvops pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm   pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsmblocked 
 test-amd64-amd64-xl-qemuu-debianhvm-amd64-xsmpass
 test-amd64-i386-xl-qemuu-debianhvm-amd64-xsm pass
 test-amd64-amd64-qemuu-nested-amdfail
 test-amd64-i386-qemuu-rhel6hvm-amd   pass
 test-amd64-amd64-xl-qemuu-debianhvm-amd64pass
 test-amd64-i386-xl-qemuu-debianhvm-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-dmrestrictfail
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict fail
 test-amd64-amd64-xl-qemuu-win10-i386 fail
 test-amd64-i386-xl-qemuu-win10-i386  fail
 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


Not pushing.


commit d9a8b867a3af8090290b69b8f94b24e7fba9e504
Author: Gerd Hoffmann 
Date:   Wed Nov 15 14:43:10 2017 +0100

qemu: add qemu ramfb support

Add support for qemu ramfb.  This is a simple boot framebuffer device,
with normal ram being used to back the framebuffer and fw_cfg being used
to configure the device.

Use case (on x86): boot display for vgpu devices (which neither emulate
vga nor have a vgabios).

Sharing fw_cfg code with seabios turned out to be difficuilt due to
various dependencies the code has on infrastructure which only seabios
has.  So include a copy of the code here, with those dependencies
removed a

[Xen-devel] [xen-unstable test] 124566: tolerable FAIL - PUSHED

2018-06-22 Thread osstest service owner
flight 124566 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/124566/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt 14 saverestore-support-checkfail  like 124057
 test-armhf-armhf-libvirt-xsm 14 saverestore-support-checkfail  like 124057
 test-armhf-armhf-libvirt-raw 13 saverestore-support-checkfail  like 124057
 test-amd64-amd64-xl-qemut-win7-amd64 17 guest-stopfail like 124090
 test-amd64-amd64-xl-qemuu-win7-amd64 17 guest-stopfail like 124090
 test-amd64-i386-xl-qemuu-win7-amd64 17 guest-stop fail like 124090
 test-amd64-i386-xl-qemut-win7-amd64 17 guest-stop fail like 124090
 test-amd64-i386-xl-qemuu-ws16-amd64 17 guest-stop fail like 124090
 test-amd64-amd64-xl-qemuu-ws16-amd64 17 guest-stopfail like 124090
 test-amd64-amd64-xl-qemut-ws16-amd64 17 guest-stopfail like 124090
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 10 debian-hvm-install 
fail never pass
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 10 debian-hvm-install 
fail never pass
 test-amd64-i386-libvirt-xsm  13 migrate-support-checkfail   never pass
 test-amd64-i386-xl-pvshim12 guest-start  fail   never pass
 test-amd64-i386-libvirt  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  14 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl  14 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt 13 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-amd64-amd64-qemuu-nested-amd 17 debian-hvm-install/l1/l2  fail never pass
 test-amd64-amd64-libvirt-vhd 12 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-xsm  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-xsm  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-cubietruck 13 migrate-support-checkfail never pass
 test-armhf-armhf-xl-cubietruck 14 saverestore-support-checkfail never pass
 test-armhf-armhf-xl-rtds 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 14 saverestore-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 14 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt-raw 12 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-vhd  12 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-vhd  13 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-multivcpu 13 migrate-support-checkfail  never pass
 test-armhf-armhf-xl-multivcpu 14 saverestore-support-checkfail  never pass
 test-armhf-armhf-xl-arndale  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  14 saverestore-support-checkfail   never pass
 test-amd64-i386-xl-qemut-ws16-amd64 17 guest-stop  fail never pass
 test-amd64-i386-xl-qemuu-win10-i386 10 windows-install fail never pass
 test-amd64-amd64-xl-qemuu-win10-i386 10 windows-installfail never pass
 test-amd64-amd64-xl-qemut-win10-i386 10 windows-installfail never pass
 test-amd64-i386-xl-qemut-win10-i386 10 windows-install fail never pass

version targeted for testing:
 xen  437211cb696515ee5bd5dae0ab72866c9f382a33
baseline version:
 xen  11535cdbc0ae5925a55b3e735447c30faaa6f63b

Last test of basis   124090  2018-06-12 01:51:41 Z   10 days
Failing since124140  2018-06-12 17:06:49 Z   10 days9 attempts
Testing same since   124566  2018-06-22 01:33:50 Z1 days1 attempts


People who touched revisions under test:
  Andrew Cooper 
  Ian Jackson 
 

[Xen-devel] [libvirt test] 124580: regressions - FAIL

2018-06-22 Thread osstest service owner
flight 124580 libvirt real [real]
http://logs.test-lab.xenproject.org/osstest/logs/124580/

Regressions :-(

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

Tests which did not succeed, but are not blocking:
 test-arm64-arm64-libvirt-xsm  1 build-check(1)   blocked  n/a
 test-amd64-amd64-libvirt-pair  1 build-check(1)   blocked  n/a
 test-amd64-i386-libvirt   1 build-check(1)   blocked  n/a
 test-amd64-amd64-libvirt-vhd  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
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 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-xsm  1 build-check(1)   blocked  n/a
 test-armhf-armhf-libvirt-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-amd64-i386-libvirt-pair  1 build-check(1)   blocked  n/a
 test-amd64-amd64-libvirt  1 build-check(1)   blocked  n/a

version targeted for testing:
 libvirt  1136fd4ebe886f9c3bd396c4488279ba22a8e5d5
baseline version:
 libvirt  076a2b409667dd9f716a2a2085e1ffea9d58fe8b

Last test of basis   123814  2018-06-05 04:19:23 Z   17 days
Failing since123840  2018-06-06 04:19:28 Z   16 days   17 attempts
Testing same since   124580  2018-06-22 04:19:03 Z0 days1 attempts


People who touched revisions under test:
  Andrea Bolognani 
  Anya Harter 
  Brijesh Singh 
  Chen Hanxiao 
  Christian Ehrhardt 
  Cole Robinson 
  Daniel Nicoletti 
  Daniel P. Berrangé 
  Erik Skultety 
  Fabiano Fidêncio 
  Filip Alac 
  intrigeri 
  intrigeri 
  Jamie Strandboge 
  Jiri Denemark 
  John Ferlan 
  Julio Faracco 
  Ján Tomko 
  Katerina Koukiou 
  Laine Stump 
  Laszlo Ersek 
  Luyao Huang 
  Marc Hartmayer 
  Martin Kletzander 
  Michal Privoznik 
  Pavel Hrdina 
  Peter Krempa 
  Radostin Stoyanov 
  Ramy Elkest 
  ramyelkest 
  Roman Bogorodskiy 
  Stefan Bader 
  Stefan Berger 

jobs:
 build-amd64-xsm  pass
 build-arm64-xsm  pass
 build-armhf-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-pvopspass
 build-arm64-pvopspass
 build-armhf-pvopspass
 build-i386-pvops pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm   blocked 
 test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsmblocked 
 test-amd64-amd64-libvirt-xsm blocked 
 test-arm64-arm64-libvirt-xsm blocked 
 test-armhf-armhf-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-pairblocked 
 test-amd64-i386-libvirt-pair blocked 
 test-arm64-arm64-libvirt-qcow2   blocked 
 test-armhf-armhf-libvirt-raw blocked 
 test-amd64-amd64-libvirt-vhd blocked 



[Xen-devel] Time to branch off 4.11

2018-06-22 Thread Juergen Gross
Ian,

could you please branch off Xen 4.11 at current master (commit
437211cb696515ee5bd5dae0ab72866c9f382a33)? There has been a push, so I
believe its time.


Juergen

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [linux-linus test] 124444: regressions - trouble: blocked/broken/fail/pass

2018-06-22 Thread osstest service owner
flight 12 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/12/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-armhf-armhf-xl-rtds broken
 test-armhf-armhf-xl-cubietruck broken
 test-armhf-armhf-libvirt-xsm broken
 test-armhf-armhf-xl-vhd  broken
 test-armhf-armhf-xl-cubietruck  4 host-install(4)  broken REGR. vs. 123554
 test-armhf-armhf-libvirt-xsm  4 host-install(4)broken REGR. vs. 123554
 test-armhf-armhf-xl-vhd   4 host-install(4)broken REGR. vs. 123554
 build-i386-libvirt6 libvirt-buildfail REGR. vs. 123554
 build-i386-pvops  6 kernel-build fail REGR. vs. 123554
 test-armhf-armhf-examine  8 reboot   fail REGR. vs. 123554
 test-armhf-armhf-libvirt-raw  7 xen-boot fail REGR. vs. 123554
 test-armhf-armhf-xl   7 xen-boot fail REGR. vs. 123554
 test-armhf-armhf-xl-multivcpu  7 xen-bootfail REGR. vs. 123554
 test-armhf-armhf-libvirt  7 xen-boot fail REGR. vs. 123554
 test-armhf-armhf-xl-credit2   7 xen-boot fail REGR. vs. 123554
 test-armhf-armhf-xl-xsm   7 xen-boot fail REGR. vs. 123554

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds  4 host-install(4)broken REGR. vs. 123554

Tests which did not succeed, but are not blocking:
 test-amd64-i386-freebsd10-amd64  1 build-check(1)   blocked  n/a
 test-amd64-i386-libvirt   1 build-check(1)   blocked  n/a
 test-amd64-i386-xl-qemuu-debianhvm-amd64-xsm  1 build-check(1) blocked n/a
 test-amd64-i386-qemut-rhel6hvm-amd  1 build-check(1)   blocked n/a
 test-amd64-i386-xl-xsm1 build-check(1)   blocked  n/a
 test-amd64-i386-rumprun-i386  1 build-check(1)   blocked  n/a
 test-amd64-i386-pair  1 build-check(1)   blocked  n/a
 test-amd64-i386-examine   1 build-check(1)   blocked  n/a
 test-amd64-i386-xl1 build-check(1)   blocked  n/a
 test-amd64-i386-xl-qemut-win10-i386  1 build-check(1)  blocked n/a
 test-amd64-i386-xl-qemuu-win7-amd64  1 build-check(1)  blocked n/a
 test-amd64-i386-xl-qemuu-win10-i386  1 build-check(1)  blocked n/a
 test-amd64-i386-freebsd10-i386  1 build-check(1)   blocked  n/a
 test-amd64-i386-xl-raw1 build-check(1)   blocked  n/a
 test-amd64-i386-xl-qemut-ws16-amd64  1 build-check(1)  blocked n/a
 test-amd64-i386-xl-qemuu-ovmf-amd64  1 build-check(1)  blocked n/a
 test-amd64-i386-libvirt-xsm   1 build-check(1)   blocked  n/a
 test-amd64-i386-xl-qemuu-debianhvm-amd64  1 build-check(1) blocked n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)   blocked  n/a
 test-amd64-i386-xl-shadow 1 build-check(1)   blocked  n/a
 test-amd64-i386-xl-qemut-stubdom-debianhvm-amd64-xsm 1 build-check(1) blocked 
n/a
 test-amd64-i386-xl-pvshim 1 build-check(1)   blocked  n/a
 test-amd64-i386-qemuu-rhel6hvm-amd  1 build-check(1)   blocked n/a
 test-amd64-i386-xl-qemut-debianhvm-amd64-xsm  1 build-check(1) blocked n/a
 test-amd64-i386-qemut-rhel6hvm-intel  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-xl-qemuu-dmrestrict-amd64-dmrestrict 1 build-check(1) blocked 
n/a
 test-amd64-i386-xl-qemuu-ws16-amd64  1 build-check(1)  blocked n/a
 test-amd64-i386-xl-qemut-win7-amd64  1 build-check(1)  blocked n/a
 test-amd64-i386-qemuu-rhel6hvm-intel  1 build-check(1) blocked n/a
 test-amd64-i386-xl-qemut-debianhvm-amd64  1 build-check(1) blocked n/a
 test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow  1 build-check(1)  blocked n/a
 test-amd64-amd64-xl-qemut-win7-amd64 17 guest-stopfail like 123554
 test-amd64-amd64-xl-qemuu-win7-amd64 17 guest-stopfail like 123554
 test-amd64-amd64-xl-qemut-ws16-amd64 17 guest-stopfail like 123554
 test-amd64-amd64-xl-qemuu-ws16-amd64 17 guest-stopfail like 123554
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 10 debian-hvm-install 
fail never pass
 test-amd64-amd64-libvirt 13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  14 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  14 saverestore-support-checkfail   never pass
 test-amd64-amd

[Xen-devel] [qemu-mainline test] 124582: regressions - FAIL

2018-06-22 Thread osstest service owner
flight 124582 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/124582/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 build-i386-libvirt6 libvirt-buildfail REGR. vs. 124232
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 16 
depriv-audit-qemu/create/privcmd running
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 16 
depriv-audit-qemu/create/privcmd running
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 17 
depriv-audit-qemu/create/gntdev running
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 17 
depriv-audit-qemu/create/gntdev running
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 18 
depriv-audit-qemu/create/evtchn running
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 18 
depriv-audit-qemu/create/evtchn running
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 19 
depriv-audit-qemu/create/other running
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 19 
depriv-audit-qemu/create/other running
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 20 
depriv-audit-qemu/create/xenstore running
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 20 
depriv-audit-qemu/create/xenstore running

Tests which did not succeed, but are not blocking:
 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-amd64-i386-libvirt   1 build-check(1)   blocked  n/a
 test-amd64-i386-libvirt-pair  1 build-check(1)   blocked  n/a
 test-amd64-amd64-xl-qemuu-win7-amd64 17 guest-stopfail like 124232
 test-armhf-armhf-libvirt 14 saverestore-support-checkfail  like 124232
 test-amd64-i386-xl-qemuu-win7-amd64 17 guest-stop fail like 124232
 test-armhf-armhf-libvirt-xsm 14 saverestore-support-checkfail  like 124232
 test-amd64-amd64-xl-qemuu-ws16-amd64 17 guest-stopfail like 124232
 test-armhf-armhf-libvirt-raw 13 saverestore-support-checkfail  like 124232
 test-amd64-i386-xl-pvshim12 guest-start  fail   never pass
 test-arm64-arm64-xl-credit2  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  14 saverestore-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 14 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl  14 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt 13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  13 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  14 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 11 migrate-support-check 
fail never pass
 test-armhf-armhf-xl-arndale  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  14 saverestore-support-checkfail   never pass
 test-amd64-amd64-qemuu-nested-amd 17 debian-hvm-install/l1/l2  fail never pass
 test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict 15 
depriv-audit-qemu/create fail never pass
 test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict 15 
depriv-audit-qemu/create fail never pass
 test-amd64-amd64-libvirt-vhd 12 migrate-support-checkfail   never pass
 test-armhf-armhf-libvirt 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-xsm  13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-cubietruck 13 migrate-support-checkfail never pass
 test-armhf-armhf-xl-cubietruck 14 saverestore-support-checkfail never pass
 test-armhf-armhf-xl-xsm  14 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-multivcpu 13 migrate-support-checkfail  never pass
 test-armhf-armhf-xl-multivcpu 14 saverestore-support-checkfail  never pass
 test-armhf-armhf-libvirt-xsm 13 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-vhd  12 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-vhd  13 saverestore-support-checkfail   never pass
 test-amd64-i386-xl-qemuu-ws16-amd64 17 guest-stop  fail never pass
 test-armhf-armhf-libvirt-raw 12 migrat