Hi Neel,

On 6/16/21 5:28 PM, Neel Chauhan wrote:
Hi,

On 2021-06-16 00:35, Hans Petter Selasky wrote:
Do you have the full backtrace?

Yes.

I have attached a stack trace in the previous email, but if you didn't get it, I have uploaded it to GitHub: https://gist.github.com/neelchauhan/437bd10239f84c563aafb37ab440029a

Doesn't this code work in the current DRM - kmod? What changed? Did
you perhaps miss a patch?

I think there is new code with Linux 5.6 which changes how this is done.

I have been attempting to make a FreeBSD equivalent, but it panics. It is **not** from missing Linux commits since I believe I added them all.

The code in my GH repo: https://github.com/neelchauhan/drm-kmod/blob/5.7-wip/drivers/gpu/drm/i915/gem/i915_gem_mman.c#L346

I think the following changes are needed. CC'ing Jeff.


        for_each_sg_page(pages->sgl, &sg_iter, pages->nents, 0) {
                pmap_t pmap = vm_map_pmap(map);
                struct vm_page *pa = sg_page_iter_page(&sg_iter);
                VM_OBJECT_RLOCK(pa->object);

Try adding this:
                vm_object_busy(pa->object);

                if (pmap_enter(pmap, va, pa, 0, flags, 0)) {

Try adding this:
                vm_object_unbusy(pa->object);
                VM_OBJECT_RUNLOCK(pa->object);

                        err = -ENOMEM;
                        break;
                }
Try adding this:
                vm_object_unbusy(pa->object);

                VM_OBJECT_RUNLOCK(pa->object);
                va += PAGE_SIZE;

--HPS

Reply via email to