Re: Bad page state in tidspbridge driver

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

 



Hi Laurent,

On Sun, Jan 8, 2012 at 12:17 PM, Laurent Pinchart
<laurent.pinchart@xxxxxxxxxxxxxxxx> wrote:
> Hi,
>
> I'm hitting what seems to be a tidspbridge driver issue when using gst-dsp
> with the DSP JPEG encoder.
>
> My application captures images from the OMAP3 ISP directly to frame buffer
> memory for display. It then passes the frame buffer buffer pointer to gst-dsp
> and the tidspbridge driver, which maps them to the DSP IOMMU address space.

Frame buffer sounds like kernel memory not user's, this because
tidspbridge map functions do get_user_pages on the memory passed to
it, unless you set VM_IO (I believe, so tidspbridge just does a
get_page), however the issue might be related with the page count in
the end.

> When starting the JPEG encoder a bunch of identical messages are printed to
> the kernel log:
>
> [14643.065490] BUG: Bad page state in process source:src  pfn:89e39
> [14643.072143] page:c0b11720 count:0 mapcount:0 mapping:  (null) index:0x0
> [14643.079437] page flags: 0x410(dirty|reserved)
> [14643.084197] [<c003ee5c>] (unwind_backtrace+0x0/0xe0) from [<c00a4c34>]
> (bad_page+0xc4/0xec)
> [14643.093505] [<c00a4c34>] (bad_page+0xc4/0xec) from [<c00a5480>]
> (free_pages_prepare+0x70/0xe8)
> [14643.102935] [<c00a5480>] (free_pages_prepare+0x70/0xe8) from [<c00a5634>]
> (free_hot_cold_page+0x20/0x1ac)
> [14643.113525] [<c00a5634>] (free_hot_cold_page+0x20/0x1ac) from [<bf00d120>]
> (bridge_brd_mem_un_map+0x12c/0x3d4 [bridgedriver])
> [14643.126007] [<bf00d120>] (bridge_brd_mem_un_map+0x12c/0x3d4 [bridgedriver])
> from [<bf01cda8>] (proc_un_map+0x6c/0xa0 [bridgedriver])
> [14643.139404] [<bf01cda8>] (proc_un_map+0x6c/0xa0 [bridgedriver]) from
> [<bf014490>] (api_call_dev_ioctl+0xe8/0x10c [bridgedriver])
> [14643.152160] [<bf014490>] (api_call_dev_ioctl+0xe8/0x10c [bridgedriver])
> from [<bf0208b8>] (bridge_ioctl+0x12c/0x15c [bridgedriver])
> [14643.165191] [<bf0208b8>] (bridge_ioctl+0x12c/0x15c [bridgedriver]) from
> [<c00d8fd8>] (do_vfs_ioctl+0x4e8/0x55c)
> [14643.176177] [<c00d8fd8>] (do_vfs_ioctl+0x4e8/0x55c) from [<c00d9080>]
> (sys_ioctl+0x34/0x54)
> [14643.185333] [<c00d9080>] (sys_ioctl+0x34/0x54) from [<c003a700>]
> (ret_fast_syscall+0x0/0x3c)
>
> The backtrace is printed because the page has the PG_reserved flag set, which
> is expected (as far as I know) for the frame buffer memory.

Yes, PG_reserved is set, and given that tidspbridge is unmapping, it
is also telling the kernel that the pages are not going to be used
anymore, however in the beginning the memory was allocated by either
frame buffer or display driver.

I believe the issue is because the page count reaches to 0 but
PG_reserved is set as you point out.

> Is this use case unsupported ?

Not entirely supported, as long as the memory used by other drivers
increases the page count of each page there shouldn't be any issue,
since bridge doesn't know which pages have more than X number of
users.

Regards,

Omar
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux