s390/protvirt: restore force_dma_unencrypted()
PATCH 1/1 s390/protvirt: restore force_dma_unencrypted()
Since commit e67a5ed1f86f ("dma-direct: Force unencrypted DMA under SME for certain DMA masks"), force_dma_unencrypted() is broken on s390 (under protvirt). Before used to return sev_active(), after it became practically architecture specific, with the default implementation always returning false.
Let's restore the old behavior of force_dma_unencrypted().
Note: we still need sev_active() defined because of the reference in fs/core/vmcore, but this one is likely to go away soon along with the need for an s390 sev_active().
certain DMA masks")
--
Thiago has a path that gets rid of the fs/core/vmcore reference. Link:
https://patchwork.ozlabs.org/patch/1131571/
Prior discussion:
https://www.spinics.net/lists/kernel/msg3189113.html
--- arch/s390/Kconfig | 1 + arch/s390/include/asm/mem_encrypt.h | 2 +- arch/s390/mm/init.c | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-)
arch/s390/Kconfig +1 -0
@@ -189,6 +189,7 @@ config S390 select VIRT_CPU_ACCOUNTING select ARCH_HAS_SCALED_CPUTIME select HAVE_NMI + select ARCH_HAS_FORCE_DMA_UNENCRYPTED select SWIOTLB select GENERIC_ALLOCATOR
arch/s390/include/asm/mem_encrypt.h +1 -1
@@ -7,7 +7,7 @@#define sme_me_mask 0ULLstatic inline bool sme_active (void ) {return false; } -extern bool sev_active (void ); +static inline bool sev_active (void ) {return false; }int set_memory_encrypted (unsigned long addr,int numpages);int set_memory_decrypted (unsigned long addr,int numpages);
arch/s390/mm/init.c +1 -1
@@ -156,7 +156,7 @@ int set_memory_decrypted(unsigned long addr, int numpages) }/* are we a protected virtualization guest? */ -bool sev_active (void ) +bool force_dma_unencrypted (struct device *dev) {return is_prot_virt_guest (); }
Signature · 1 line
2.17.1
This looks good to me - if you and Tom are fine with it I'd like to fold it into his commit so that what I'll send to Linus is bisection clean.
Quoted 3 lines
Note: we still need
sev_active()defined because of the reference infs/core/vmcore, but this one is likely to go away soon along with the need for an s390sev_active().
Any chance we could not change the return value from the function at least in this patch/fold as that change seems unrelated to the dma functionality. If that is what you really wanted and only the dma code was in the way we can happily merge it as a separate patch, of couse.
Quoted 3 lines · Christoph Hellwig
This looks good to me - if you and Tom are fine with it I'd like to fold it into his commit so that what I'll send to Linus is bisection clean.
I'm ok with folding it in. Sorry about missing that.
Thanks,
Tom
Quoted 11 lines
Quoted 4 lines
Note: we still need
sev_active()defined because of the reference infs/core/vmcore, but this one is likely to go away soon along with the need for an s390sev_active().Any chance we could not change the return value from the function at least in this patch/fold as that change seems unrelated to the dma functionality. If that is what you really wanted and only the dma code was in the way we can happily merge it as a separate patch, of couse.
Quoted 6 lines · Thomas
Quoted 3 lines · Christoph Hellwig
This looks good to me - if you and Tom are fine with it I'd like to fold it into his commit so that what I'll send to Linus is bisection clean.
I'm ok with folding it in. Sorry about missing that.
The s390 changes were queued up in a different tree for 5.2, so you had no easy way of noticing this.
Ok,
I've folded the minimal s390 fix in, please both double check that this is ok as the minimally invasive fix:
The s390 fix to clean up sev_active can then go into the series that Thiago is working on.
Quoted 10 lines · On Mon, 15 Jul 2019 07:20:45 -0700 Christoph Hellwig <[email protected]> wrote:
Ok,
I've folded the minimal s390 fix in, please both double check that this is ok as the minimally invasive fix:
The s390 fix to clean up
sev_activecan then go into the series that Thiago is working on.
Works with me.
Regards,
Halil
Quoted 4 lines · Christoph Hellwig
Ok,
I've folded the minimal s390 fix in, please both double check that this is ok as the minimally invasive fix:
Looks good to me.
Thanks,
Tom
Quoted 6 lines
The s390 fix to clean up
sev_activecan then go into the series that Thiago is working on.
Quoted 3 lines · On Mon, 15 Jul 2019 06:20:27 -0700 Christoph Hellwig <[email protected]> wrote:
This looks good to me - if you and Tom are fine with it I'd like to fold it into his commit so that what I'll send to Linus is bisection clean.
No objections here.
Quoted 11 lines
Quoted 4 lines
Note: we still need
sev_active()defined because of the reference infs/core/vmcore, but this one is likely to go away soon along with the need for an s390sev_active().Any chance we could not change the return value from the function at least in this patch/fold as that change seems unrelated to the dma functionality. If that is what you really wanted and only the dma code was in the way we can happily merge it as a separate patch, of couse.
AFAIU the story form fs/core/vmcore.c boils down to the same on s390. I explained this in an email I've sent a moment ago (to Thiago). I expect sev_active() on s390 to go away soon as it really does not make sense for us (any more).
Thus yes, we can restore the pre- e67a5ed1f86f ("dma-direct: Force unencrypted DMA under SME for certain DMA masks") sev_active() behavior as well, even if we don't care about it. What I did conveys the semantic better. Not changing the behavior of however sev_active() makes more sense if the two are going to be squashed.
The corresponding diff looks like follows. Would you like me to send it out as v2?
Regards,
Halil
----------------------------8<---------------------------------------
arch/s390/Kconfig +1 -0
@@ -189,6 +189,7 @@ config S390 select VIRT_CPU_ACCOUNTING select ARCH_HAS_SCALED_CPUTIME select HAVE_NMI + select ARCH_HAS_FORCE_DMA_UNENCRYPTED select SWIOTLB select GENERIC_ALLOCATOR
arch/s390/mm/init.c +6 -1
@@ -155,12 +155,17 @@ int set_memory_decrypted(unsigned long addr, int numpages)return 0 ; } -/* are we a protected virtualization guest? */ bool sev_active (void ) {return is_prot_virt_guest (); } +/* are we a protected virtualization guest? */ +bool force_dma_unencrypted (struct device *dev) +{ +return is_prot_virt_guest (); +} +/* protected virtualization */ static void pv_init (void ) {