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

Commit 32206ab3 authored by Reinette Chatre's avatar Reinette Chatre Committed by Thomas Gleixner
Browse files

x86/intel_rdt: Provide pseudo-locking hooks within rdt_mount



Stephen Rothwell reported that the Cache Pseudo-Locking enabling and the
kernfs support for mounting with fs_context are conflicting.

In preparation for a conflict-free merge between the two repos some no-op
hooks are created within the RDT mount function being changed by the two
features. The goal is for this commit to be placed on a minimal no-rebase
branch to be consumed by both features.

Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Suggested-by: default avatarAl Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: fenghua.yu@intel.com
Cc: tony.luck@intel.com
Cc: vikas.shivappa@linux.intel.com
Cc: gavin.hindman@intel.com
Cc: jithu.joseph@intel.com
Cc: dave.hansen@intel.com
Cc: hpa@zytor.com
Cc: David Howells <dhowells@redhat.com>
Link: https://lkml.kernel.org/r/410697ead08978bd12111c0afc4ce9e7bd71a5fe.1529706536.git.reinette.chatre@intel.com
parent ce397d21
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -468,4 +468,13 @@ void cqm_handle_limbo(struct work_struct *work);
bool has_busy_rmid(struct rdt_resource *r, struct rdt_domain *d);
bool has_busy_rmid(struct rdt_resource *r, struct rdt_domain *d);
void __check_limbo(struct rdt_domain *d, bool force_free);
void __check_limbo(struct rdt_domain *d, bool force_free);


/*
 * Define the hooks for Cache Pseudo-Locking to use within rdt_mount().
 * These are no-ops provided for the new kernfs changes to use as a
 * baseline in preparation for a conflict-free merge between it
 * (kernfs changes) and the Cache Pseudo-Locking enabling.
 */
static inline int rdt_pseudo_lock_init(void) { return 0; }
static inline void rdt_pseudo_lock_release(void) { }

#endif /* _ASM_X86_INTEL_RDT_H */
#endif /* _ASM_X86_INTEL_RDT_H */
+9 −1
Original line number Original line Diff line number Diff line
@@ -1289,10 +1289,16 @@ static struct dentry *rdt_mount(struct file_system_type *fs_type,
		rdtgroup_default.mon.mon_data_kn = kn_mondata;
		rdtgroup_default.mon.mon_data_kn = kn_mondata;
	}
	}


	ret = rdt_pseudo_lock_init();
	if (ret) {
		dentry = ERR_PTR(ret);
		goto out_mondata;
	}

	dentry = kernfs_mount(fs_type, flags, rdt_root,
	dentry = kernfs_mount(fs_type, flags, rdt_root,
			      RDTGROUP_SUPER_MAGIC, NULL);
			      RDTGROUP_SUPER_MAGIC, NULL);
	if (IS_ERR(dentry))
	if (IS_ERR(dentry))
		goto out_mondata;
		goto out_psl;


	if (rdt_alloc_capable)
	if (rdt_alloc_capable)
		static_branch_enable_cpuslocked(&rdt_alloc_enable_key);
		static_branch_enable_cpuslocked(&rdt_alloc_enable_key);
@@ -1310,6 +1316,8 @@ static struct dentry *rdt_mount(struct file_system_type *fs_type,


	goto out;
	goto out;


out_psl:
	rdt_pseudo_lock_release();
out_mondata:
out_mondata:
	if (rdt_mon_capable)
	if (rdt_mon_capable)
		kernfs_remove(kn_mondata);
		kernfs_remove(kn_mondata);