Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c906ca0f authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nvc0: enable protection of system-use-only structures in vm



Somehow missed this in the original merge of the nvc0 code.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 1380da49
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -160,6 +160,7 @@ enum nouveau_flags {
#define NVOBJ_FLAG_ZERO_ALLOC		(1 << 1)
#define NVOBJ_FLAG_ZERO_FREE		(1 << 2)
#define NVOBJ_FLAG_VM			(1 << 3)
#define NVOBJ_FLAG_VM_USER		(1 << 4)

#define NVOBJ_CINST_GLOBAL	0xdeadbeef

+5 −2
Original line number Diff line number Diff line
@@ -332,8 +332,11 @@ nv50_instmem_get(struct nouveau_gpuobj *gpuobj, u32 size, u32 align)
	gpuobj->vinst = node->vram->offset;

	if (gpuobj->flags & NVOBJ_FLAG_VM) {
		ret = nouveau_vm_get(dev_priv->chan_vm, size, 12,
				     NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS,
		u32 flags = NV_MEM_ACCESS_RW;
		if (!(gpuobj->flags & NVOBJ_FLAG_VM_USER))
			flags |= NV_MEM_ACCESS_SYS;

		ret = nouveau_vm_get(dev_priv->chan_vm, size, 12, flags,
				     &node->chan_vma);
		if (ret) {
			vram->put(dev, &node->vram);
+2 −1
Original line number Diff line number Diff line
@@ -105,7 +105,8 @@ nvc0_graph_create_context_mmio_list(struct nouveau_channel *chan)
	if (ret)
		return ret;

	ret = nouveau_gpuobj_new(dev, NULL, 384 * 1024, 4096, NVOBJ_FLAG_VM,
	ret = nouveau_gpuobj_new(dev, NULL, 384 * 1024, 4096,
				 NVOBJ_FLAG_VM | NVOBJ_FLAG_VM_USER,
				 &grch->unk418810);
	if (ret)
		return ret;
+2 −2
Original line number Diff line number Diff line
@@ -48,8 +48,8 @@ nvc0_vm_addr(struct nouveau_vma *vma, u64 phys, u32 memtype, u32 target)
	phys >>= 8;

	phys |= 0x00000001; /* present */
//	if (vma->access & NV_MEM_ACCESS_SYS)
//		phys |= 0x00000002;
	if (vma->access & NV_MEM_ACCESS_SYS)
		phys |= 0x00000002;

	phys |= ((u64)target  << 32);
	phys |= ((u64)memtype << 36);