Re: Bad page state in tidspbridge driver

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

 



Hi Omar,

On Monday 09 January 2012 18:30:11 Ramirez Luna, Omar wrote:
> On Sun, Jan 8, 2012 at 12:17 PM, Laurent Pinchart 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.

The frame buffer memory is first mapped to userspace in the omap_vout driver, 
and then passed to the tidspbridge driver.

> > 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.

Probably. I'll try to investigate more.

> > 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,

Laurent Pinchart
--
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