On Thu, Dec 03, 2020 at 08:45:15AM +0200, Adrian Hunter wrote: > On 3/12/20 4:05 am, Eric Biggers wrote: > > From: Eric Biggers <ebiggers@xxxxxxxxxx> > > > > Move the task descriptor initialization into cqhci_prep_task_desc(), and > > make it initialize all 128 bits of the task descriptor if the host > > controller is using 128-bit task descriptors. > > > > This is needed to prepare for CQHCI inline encryption support, which > > requires 128-bit task descriptors and uses the upper 64 bits. > > > > Note: since some host controllers already enable 128-bit task > > descriptors, it's unclear why the previous code worked when it wasn't > > initializing the upper 64 bits. One possibility is that the bits are > > being ignored because the features that use them aren't enabled yet. > > In any case, setting them to 0 won't hurt. > > Coherent allocations are zero-initialized. So the upper 64-bits stay zero. > People set 128-bit anyway because the hardware needs it. Okay, that explains it then -- I didn't realize that dma_alloc_coherent() always returns zeroed memory. It isn't mentioned in Documentation/core-api/dma-api.rst, and there's no kerneldoc comment, so it wasn't clear. But apparently it's intentional; see commit 518a2f1925c3 ("dma-mapping: zero memory returned from dma_alloc_*"). I'll fix this commit message in the next version. - Eric