Commit 4bf0b820 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull x86 SGX fixes from Borislav Petkov:
 "Random small fixes which missed the initial SGX submission. Also, some
  procedural clarifications"

* tag 'x86_sgx_for_v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  MAINTAINERS: Add Dave Hansen as reviewer for INTEL SGX
  x86/sgx: Drop racy follow_pfn() check
  MAINTAINERS: Fix the tree location for INTEL SGX patches
  x86/sgx: Fix the return type of sgx_init()
parents 70cd33d3 84847778
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -9183,10 +9183,11 @@ F: include/linux/tboot.h
INTEL SGX
INTEL SGX
M:	Jarkko Sakkinen <jarkko@kernel.org>
M:	Jarkko Sakkinen <jarkko@kernel.org>
R:	Dave Hansen <dave.hansen@linux.intel.com>
L:	linux-sgx@vger.kernel.org
L:	linux-sgx@vger.kernel.org
S:	Supported
S:	Supported
Q:	https://patchwork.kernel.org/project/intel-sgx/list/
Q:	https://patchwork.kernel.org/project/intel-sgx/list/
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-sgx.git
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/sgx
F:	Documentation/x86/sgx.rst
F:	Documentation/x86/sgx.rst
F:	arch/x86/entry/vdso/vsgx.S
F:	arch/x86/entry/vdso/vsgx.S
F:	arch/x86/include/uapi/asm/sgx.h
F:	arch/x86/include/uapi/asm/sgx.h
+0 −8
Original line number Original line Diff line number Diff line
@@ -141,7 +141,6 @@ static vm_fault_t sgx_vma_fault(struct vm_fault *vmf)
	struct sgx_encl_page *entry;
	struct sgx_encl_page *entry;
	unsigned long phys_addr;
	unsigned long phys_addr;
	struct sgx_encl *encl;
	struct sgx_encl *encl;
	unsigned long pfn;
	vm_fault_t ret;
	vm_fault_t ret;


	encl = vma->vm_private_data;
	encl = vma->vm_private_data;
@@ -168,13 +167,6 @@ static vm_fault_t sgx_vma_fault(struct vm_fault *vmf)


	phys_addr = sgx_get_epc_phys_addr(entry->epc_page);
	phys_addr = sgx_get_epc_phys_addr(entry->epc_page);


	/* Check if another thread got here first to insert the PTE. */
	if (!follow_pfn(vma, addr, &pfn)) {
		mutex_unlock(&encl->lock);

		return VM_FAULT_NOPAGE;
	}

	ret = vmf_insert_pfn(vma, addr, PFN_DOWN(phys_addr));
	ret = vmf_insert_pfn(vma, addr, PFN_DOWN(phys_addr));
	if (ret != VM_FAULT_NOPAGE) {
	if (ret != VM_FAULT_NOPAGE) {
		mutex_unlock(&encl->lock);
		mutex_unlock(&encl->lock);
+9 −5
Original line number Original line Diff line number Diff line
@@ -700,25 +700,27 @@ static bool __init sgx_page_cache_init(void)
	return true;
	return true;
}
}


static void __init sgx_init(void)
static int __init sgx_init(void)
{
{
	int ret;
	int ret;
	int i;
	int i;


	if (!cpu_feature_enabled(X86_FEATURE_SGX))
	if (!cpu_feature_enabled(X86_FEATURE_SGX))
		return;
		return -ENODEV;


	if (!sgx_page_cache_init())
	if (!sgx_page_cache_init())
		return;
		return -ENOMEM;


	if (!sgx_page_reclaimer_init())
	if (!sgx_page_reclaimer_init()) {
		ret = -ENOMEM;
		goto err_page_cache;
		goto err_page_cache;
	}


	ret = sgx_drv_init();
	ret = sgx_drv_init();
	if (ret)
	if (ret)
		goto err_kthread;
		goto err_kthread;


	return;
	return 0;


err_kthread:
err_kthread:
	kthread_stop(ksgxd_tsk);
	kthread_stop(ksgxd_tsk);
@@ -728,6 +730,8 @@ static void __init sgx_init(void)
		vfree(sgx_epc_sections[i].pages);
		vfree(sgx_epc_sections[i].pages);
		memunmap(sgx_epc_sections[i].virt_addr);
		memunmap(sgx_epc_sections[i].virt_addr);
	}
	}

	return ret;
}
}


device_initcall(sgx_init);
device_initcall(sgx_init);