Re: [PATCH v3 21/43] drm/fbdev-dma: Implement damage handling and deferred I/O

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Linus,

Am Mittwoch, 4. September 2024, 00:53:42 CEST schrieb Linus Walleij:
> On Fri, Apr 19, 2024 at 10:35 AM Thomas Zimmermann <tzimmermann@xxxxxxx> wrote:
> 
> > Add support for damage handling and deferred I/O to fbdev-dma. This
> > enables fbdev-dma to support all DMA-memory-based DRM drivers, even
> > such with a dirty callback in their framebuffers.
> >
> > The patch adds the code for deferred I/O and also sets a dedicated
> > helper for struct fb_ops.fb_mmap that support coherent mappings.
> >
> > v3:
> > - init fb_ops with FB_GEN_DEFAULT_DEFERRED_DMAMEM_OPS() (Javier)
> >
> > Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx>
> > Reviewed-by: Javier Martinez Canillas <javierm@xxxxxxxxxx>
> 
> For some reason this makes the Versatile Express crash in QEMU
> (I can retest on real hardware if necessary):

This commit also breaks i.MX6 on actual hardware, see [1].

[1] https://lore.kernel.org/all/23636953.6Emhk5qWAg@steina-w/

> 8<--- cut here ---
> Unable to handle kernel paging request at virtual address 18095000 when write
> [18095000] *pgd=00000000
> Internal error: Oops: 805 [#1] SMP ARM
> CPU: 0 PID: 75 Comm: S08_ledflash Not tainted 6.9.0-rc6+ #44
> Hardware name: ARM-Versatile Express
> PC is at mmioset+0x34/0xac
> LR is at 0x0
> pc : [<809c2a54>]    lr : [<00000000>]    psr: 20000013
> sp : f8dddc38  ip : 18095000  fp : 00000000
> r10: 81109a18  r9 : 81238b04  r8 : 00000000
> r7 : 00440dc0  r6 : ed4f32a0  r5 : ed4f32a0  r4 : 00000001
> r3 : 00000000  r2 : 00000fc0  r1 : 00000000  r0 : 18095000
> Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
> Control: 10c5387d  Table: 81d6406a  DAC: 00000051
> Register r0 information: non-paged memory
> Register r1 information: NULL pointer
> Register r2 information: non-paged memory
> Register r3 information: NULL pointer
> Register r4 information: non-paged memory
> Register r5 information: non-slab/vmalloc memory
> Register r6 information: non-slab/vmalloc memory
> Register r7 information: non-paged memory
> Register r8 information: NULL pointer
> Register r9 information: non-slab/vmalloc memory
> Register r10 information: non-slab/vmalloc memory
> Register r11 information: NULL pointer
> Register r12 information: non-paged memory
> Process S08_ledflash (pid: 75, stack limit = 0x(ptrval))
> Stack: (0xf8dddc38 to 0xf8dde000)
> dc20:                                                       00000801 802af888
> dc40: 80a0fb80 00440dc0 00000801 811fad80 00000000 f8dddd28 ed4f32a0 811fa680
> dc60: 00000000 802b0c30 ee1d2140 ee1d215c 95ff4385 00000001 00000001 00000001
> dc80: 00000000 00000000 ffffffff 8196a70b 000000b0 00000064 0000006c 00000000
> dca0: 00000001 00000002 00000001 811fa798 00000801 811fa940 80a0fb80 00000cc0
> dcc0: 00000001 00000001 00000000 f8dddd28 811fa93c 811fa680 00000002 802b0c30
> dce0: ee1d2140 00440dc0 00000000 00000000 00000001 00000000 811fad80 00440dc0
> dd00: 00000001 00000000 00000000 83201100 00440dc0 00000000 00000000 802afa18
> dd20: 00000bdc 00000bd8 811fad80 00000000 811fad80 00000000 00000000 00000000
> dd40: adf00ec5 816d5fa8 816d5fa8 821c3c00 00000000 7ebc2000 7ebe3000 00000000
> dd60: f8ddde44 8028cfa0 816d5fa8 8288df50 8169cf00 821c3c00 7ebc2000 7ebe3000
> dd80: f8ddde44 8028e1e8 00000001 80bbe932 f8ddde44 f8dddde8 f8ddde44 8288df50
> dda0: 83201100 809cf474 f8ddde44 8169cf00 00000020 8169cf94 821c3c94 7ebe3000
> ddc0: 7ebe2fff fffffff4 00000000 816d5fa8 821c3c00 8169cf00 81d65fa8 809cdbb0
> dde0: 8288df50 81ffa910 7ebe3000 82890b00 00000000 00000000 00000000 00000000
> de00: 00000000 00000000 adf00ec5 00000000 00000000 8169cf00 8288df50 83201100
> de20: 821c3c00 81ffa910 f8ddde44 8011f6e4 00000000 00000000 821c3c7c 8169cf7c
> de40: 83200880 821c3c40 7ebc2000 7ebe2fff 82890b0c 76ea4000 ffffffff 00000000
> de60: 00000000 0f000a01 f8ddde68 f8ddde68 adf00ec5 00000000 00000000 00000000
> de80: 00000000 01200000 83201100 00000000 00000000 8011e2ac 00000000 83200d7c
> dea0: 83201020 83200e70 83200e80 00000000 f8dddf30 83200880 00000000 00000000
> dec0: 00000000 00000000 00000000 82182f38 adf00ec5 00000000 01200000 f8dddf30
> dee0: 00000000 00000000 00000000 00000078 000cb21c 8011fe24 00000020 00000000
> df00: 828a5d80 80a10140 adf00ec5 01200011 00000000 00000000 00000000 f8dddf30
> df20: 00000000 00000078 000cb21c 801203d4 01200000 00000000 00000000 76f46468
> df40: 00000000 00000000 00000011 00000000 00000000 00000000 00000000 00000000
> df60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> df80: 00000003 adf00ec5 76f46468 00000000 76f468c0 00000078 80100290 83201100
> dfa0: 000cb21c 80100060 76f46468 00000000 01200011 00000000 00000000 00000000
> dfc0: 76f46468 00000000 76f468c0 00000078 00000000 76e81000 76f46400 000cb21c
> dfe0: 00000078 7ebe2938 76e0854d 76dae7e6 20000030 01200011 00000000 00000000
> Call trace:
>  mmioset from prep_new_page+0x160/0x194
>  prep_new_page from get_page_from_freelist+0x10f4/0x110c
>  get_page_from_freelist from __alloc_pages+0x15c/0x280
>  __alloc_pages from __pte_alloc+0x28/0x1bc
>  __pte_alloc from copy_page_range+0xc10/0xd28
>  copy_page_range from copy_mm+0x5cc/0x850
>  copy_mm from copy_process+0x508/0xd8c
>  copy_process from kernel_clone+0x94/0x338
>  kernel_clone from sys_clone+0x94/0xb0
>  sys_clone from ret_fast_syscall+0x0/0x1c
> Exception stack(0xf8dddfa8 to 0xf8dddff0)
> dfa0:                   76f46468 00000000 01200011 00000000 00000000 00000000
> dfc0: 76f46468 00000000 76f468c0 00000078 00000000 76e81000 76f46400 000cb21c
> dfe0: 00000078 7ebe2938 76e0854d 76dae7e6
> Code: e92d4100 e1a08001 e1a0e003 e2522040 (a8ac410a)
> ---[ end trace 0000000000000000 ]---
> 
> I bisected down to this commit and reverting the commit solves the issue.
> 
> What is special about the Versatile Express graphics is that it uses a special
> dedicated video RAM, looks like this in the device tree
> 
> 
>         reserved-memory {
>                 #address-cells = <1>;
>                 #size-cells = <1>;
>                 ranges;
> 
>                 /* Chipselect 3 is physically at 0x4c000000 */
>                 vram: vram@4c000000 {
>                         /* 8 MB of designated video RAM */
>                         compatible = "shared-dma-pool";
>                         reg = <0x4c000000 0x00800000>;

Can you please check in which memory zone this VRAM is located. In my case
it's important CMA is located in Normal zone to trigger this problem.

Best regards,
Alexander

>                         no-map;
>                 };
>         };
> (...)
>          clcd@1f000 {
>                       compatible = "arm,pl111", "arm,primecell";
> (...)
>                       memory-region = <&vram>;
> 
> This gets picked up in the driver
> drivers/gpu/drm/pl111/pl111_drv.c
> like this:
> 
>         ret = of_reserved_mem_device_init(dev);
>         if (!ret) {
>                 dev_info(dev, "using device-specific reserved memory\n");
>                 priv->use_device_memory = true;
>         }
> 
> Yours,
> Linus Walleij
> 


-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/







[Index of Archives]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Tourism]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux