Thread (11 messages) 11 messages, 5 authors, 2024-08-17

Re: Since 6.10 - kernel oops/panics on G4 macmini due to change in drivers/ata/pata_macio.c

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2024-08-14 12:21:02
Also in: linux-ide, lkml

Niklas Cassel [off-list ref] writes:
On Tue, Aug 13, 2024 at 10:32:36PM +1000, Michael Ellerman wrote:
quoted
Niklas Cassel [off-list ref] writes:
quoted
On Tue, Aug 13, 2024 at 07:49:34AM +0200, Jonáš Vidra wrote:
...
quoted
quoted
quoted
------------[ cut here ]------------
kernel BUG at drivers/ata/pata_macio.c:544!
https://github.com/torvalds/linux/blob/v6.11-rc3/drivers/ata/pata_macio.c#L544

It seems that the
while (sg_len) loop does not play nice with the new .max_segment_size.
Right, but only for 4KB kernels for some reason. Is there some limit
elsewhere that prevents the bug tripping on 64KB kernels, or is it just
luck that no one has hit it?
Have your tried running fio (flexible I/O tester), with reads with a very
large block sizes?

I would be surprised if it isn't possible to trigger the same bug with
64K page size.

max segment size = 64K
MAX_DCMDS = 256
256 * 64K = 16 MiB
What happens if you run fio with a 16 MiB blocksize?

Something like:
$ sudo fio --name=test --filename=/dev/sdX --direct=1 --runtime=60 --ioengine=io_uring --rw=read --iodepth=4 --bs=16M
Nothing interesting happens, fio succeeds.

The largest request that comes into pata_macio_qc_prep() is 1280KB,
which results in 40 DMA list entries.

I tried with a larger block size but it doesn't change anything. I guess
there's some limit somewhere else in the stack?

That was testing on qemu, but I don't think it should matter?

I guess there's no way to run the fio test against a file, ie. without a
raw partition? My real G5 doesn't have any spare disks/partitions in it.

cheers


fio-3.37
Starting 1 process

test: (groupid=0, jobs=1): err= 0: pid=257: Wed Aug 14 22:18:59 2024
  read: IOPS=6, BW=195MiB/s (204MB/s)(96.0MiB/493msec)
    slat (usec): min=32973, max=35222, avg=33836.35, stdev=1212.51
    clat (msec): min=378, max=448, avg=413.35, stdev=34.99
     lat (msec): min=413, max=481, avg=447.19, stdev=33.87
    clat percentiles (msec):
     |  1.00th=[  380],  5.00th=[  380], 10.00th=[  380], 20.00th=[  380],
     | 30.00th=[  380], 40.00th=[  414], 50.00th=[  414], 60.00th=[  414],
     | 70.00th=[  447], 80.00th=[  447], 90.00th=[  447], 95.00th=[  447],
     | 99.00th=[  447], 99.50th=[  447], 99.90th=[  447], 99.95th=[  447],
     | 99.99th=[  447]
   bw (  KiB/s): min=195047, max=195047, per=97.82%, avg=195047.00, stdev= 0.00, samples=1
   iops        : min=    5, max=    5, avg= 5.00, stdev= 0.00, samples=1
  lat (msec)   : 500=100.00%
  cpu          : usr=1.62%, sys=11.97%, ctx=22, majf=0, minf=1540
  IO depths    : 1=33.3%, 2=66.7%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=3,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=4

Run status group 0 (all jobs):
   READ: bw=195MiB/s (204MB/s), 195MiB/s-195MiB/s (204MB/s-204MB/s), io=96.0MiB (101MB), run=493-493msec

Disk stats (read/write):
  sda: ios=78/0, sectors=196608/0, merge=0/0, ticks=745/0, in_queue=745, util=66.89%
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help