Hi Kelsey, On 4/6/2023 6:52 AM, Kelsey Steele wrote: > On Wed, Apr 05, 2023 at 07:50:34AM +0200, Petr Tesa????k wrote: >> On Wed, 5 Apr 2023 07:32:06 +0200 >> Petr Tesa????k <petr@xxxxxxxxxxx> wrote: >> >>> On Wed, 5 Apr 2023 05:11:42 +0000 >>> Dexuan Cui <decui@xxxxxxxxxxxxx> wrote: >>> >>>>> From: Petr Tesa????k <petr@xxxxxxxxxxx> >>>>> Sent: Tuesday, April 4, 2023 9:40 PM >>>>>>> ... >>>>>>> Hi Petr, this patch has gone into the mainline: >>>>>>> 0eee5ae10256 ("swiotlb: fix slot alignment checks") >>>>>>> >>>>>>> Somehow it breaks Linux VMs on Hyper-V: a regular VM with >>>>>>> swiotlb=force or a confidential VM (which uses swiotlb) fails to boot. >>>>>>> If I revert this patch, everything works fine. >>>>>> >>>>>> The log is pasted below. Looks like the SCSI driver hv_storvsc fails to >>>>>> detect the disk capacity: >>>>> >>>>> The first thing I can imagine is that there are in fact no (free) slots >>>>> in the SWIOTLB which match the alignment constraints, so the map >>>>> operation fails. However, this would result in a "swiotlb buffer is >>>>> full" message in the log, and I can see no such message in the log >>>>> excerpt you have posted. >>>>> >>>>> Please, can you check if there are any "swiotlb" messages preceding the >>>>> first error message? >>>>> >>>>> Petr T >>>> >>>> There is no "swiotlb buffer is full" error. >>>> >>>> The hv_storvsc driver (drivers/scsi/storvsc_drv.c) calls scsi_dma_map(), >>>> which doesn't return -ENOMEM when the failure happens. >>> >>> I see... >>> >>> Argh, you're right. This is a braino. The alignment mask is in fact an >>> INVERTED mask, i.e. it masks off bits that are not relevant for the >>> alignment. The more strict alignment needed the more bits must be set, >>> so the individual alignment constraints must be combined with an OR >>> instead of an AND. >>> >>> Can you apply the following change and check if it fixes the issue? >> >> Actually, this will not work either. The mask is used to mask off both >> high address bits and low address bits (below swiotlb slot granularity). >> >> What should help is this: >> > > Hi Petr, > > The suggested fix on this patch boots for me and initially looks ok, > though when I start to use git commands I get flooded with "swiotlb > buffer is full" messages and my session becomes unusable. This is on WSL > which uses Hyper-V. Roberto noticed that my initial quick fix left iotlb_align_mask uninitialized. As a result, high address bits are set randomly, and if they do not match actual swiotlb addresses, allocations may fail with "swiotlb buffer is full". I fixed it in the patch that I have just posted. HTH Petr T