> Another alternative would be to use the userspace mapping to check the BO value This is what I was thinking.
Sincerely yours, Serguei Sagalovitch On 15-04-13 11:35 AM, Christian König wrote: > On 13.04.2015 17:25, Serguei Sagalovitch wrote: >> > the BO to be kept in the same place while it is mapped inside the >> kernel page table >> ... >> > So this requires that we pin down the BO for the duration of the >> wait IOCTL. >> >> But my understanding is that it should be not duration of "wait" >> IOCTL but "duration" of command buffer execution. >> >> BTW: I would assume that this is not the new scenario. >> >> This is scenario: >> - User allocate BO >> - User get CPU address for BO >> - User submit command buffer to write to BO >> - User could "poll" / "read" or "write" BO data by CPU >> >> So when TTM needs to move BO to another location it should also >> update CPU "mapping" correctly so user will always read / write the >> correct data. >> >> Did I miss anything? > > The problem is that kernel mappings are not updated when TTM moves the > buffer around. In the case of a swapped out buffer that wouldn't even > be possible cause kernel mappings aren't pageable. > > You just can't map the BO into kernel space unless you have it pinned > down, so you can't check the current value written in the BO in your > IOCTL. > > One alternative is to send all interrupts in question unfiltered to > user space and let userspace do the check if the right value was > written or not. But I assume that this would be rather bad for > performance. > > Another alternative would be to use the userspace mapping to check the > BO value, but this approach isn't compatible with a GPU scheduler. > E.g. you can't really do cross process space memory access in device > drivers. > > Regards, > Christian. > >> >> >> Sincerely yours, >> Serguei Sagalovitch >> >> On 15-04-13 10:52 AM, Christian König wrote: >>> Hello everyone, >>> >>> we have a requirement for a bit different kind of fence handling. Currently >>> we handle fences completely inside the kernel, but in the future we would >>> like to emit multiple fences inside the same IB as well. >>> >>> This works by adding multiple fence commands into an IB which just write >>> their value to a specific location inside a BO and trigger the appropriate >>> hardware interrupt. >>> >>> The user part of the driver stack should then be able to call an IOCTL to >>> wait for the interrupt and block for the value (or something larger) to be >>> written to the specific location. >>> >>> This has the advantage that you can have multiple synchronization points in >>> the same IB and don't need to split up your draw commands over several IBs >>> so that the kernel can insert kernel fences in between. >>> >>> The following set of patches tries to implement exactly this IOCTL. The big >>> problem with that IOCTL is that TTM needs the BO to be kept in the same >>> place while it is mapped inside the kernel page table. So this requires >>> that we pin down the BO for the duration of the wait IOCTL. >>> >>> This practically gives userspace a way of pinning down BOs for as long as >>> it wants, without the ability for the kernel for intervention. >>> >>> Any ideas how to avoid those problems? Or better ideas how to handle the >>> new requirements? >>> >>> Please note that the patches are only hacked together quick&dirty to >>> demonstrate the problem and not very well tested. >>> >>> Best regards, >>> Christian. >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20150413/4e9cdeb5/attachment.html>