Hi all, Today's linux-next merge of the tip tree got a conflict in: arch/x86/kernel/cpu/resctrl/rdtgroup.c between commit: 16ec1a5d58ea ("kernfs, sysfs, cgroup, intel_rdt: Support fs_context") (where the file is arch/x86/kernel/cpu/intel_rdt_rdtgroup.c) from the vfs tree and commit: 580ebb66cbb3 ("x86/resctrl: Add vendor check for the MBA software controller") from the tip tree. I fixed it up (see below) and can carry the fix as necessary. This is now fixed as far as linux-next is concerned, but any non trivial conflicts should be mentioned to your upstream maintainer when your tree is submitted for merging. You may also want to consider cooperating with the maintainer of the conflicting tree to minimise any particularly complex conflicts. -- Cheers, Stephen Rothwell diff --cc arch/x86/kernel/cpu/resctrl/rdtgroup.c index 37c0ccb50823,61b102dd51a5..000000000000 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@@ -2032,88 -2065,8 +2032,91 @@@ out rdt_last_cmd_clear(); mutex_unlock(&rdtgroup_mutex); cpus_read_unlock(); + return ret; +} + +enum rdt_param { + Opt_cdp, + Opt_cdpl2, + Opt_mba_mpbs, + nr__rdt_params +}; - return dentry; +static const struct fs_parameter_spec rdt_param_specs[nr__rdt_params] = { + [Opt_cdp] = { fs_param_is_flag }, + [Opt_cdpl2] = { fs_param_is_flag }, + [Opt_mba_mpbs] = { fs_param_is_flag }, +}; + +static const char *const rdt_param_keys[nr__rdt_params] = { + [Opt_cdp] = "cdp", + [Opt_cdpl2] = "cdpl2", + [Opt_mba_mpbs] = "mba_mbps", +}; + +static const struct fs_parameter_description rdt_fs_parameters = { + .name = "rdt", + .nr_params = nr__rdt_params, + .keys = rdt_param_keys, + .specs = rdt_param_specs, + .no_source = true, +}; + +static int rdt_parse_param(struct fs_context *fc, struct fs_parameter *param) +{ + struct rdt_fs_context *ctx = rdt_fc2context(fc); + struct fs_parse_result result; + int opt; + + opt = fs_parse(fc, &rdt_fs_parameters, param, &result); + if (opt < 0) + return opt; + + switch (opt) { + case Opt_cdp: + ctx->enable_cdpl3 = true; + return 0; + case Opt_cdpl2: + ctx->enable_cdpl2 = true; + return 0; + case Opt_mba_mpbs: - ctx->enable_mba_mbps = true; - return 0; ++ if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) { ++ ctx->enable_mba_mbps = true; ++ return 0; ++ } ++ break; + } + + return -EINVAL; +} + +static void rdt_fs_context_free(struct fs_context *fc) +{ + struct rdt_fs_context *ctx = rdt_fc2context(fc); + + kernfs_free_fs_context(fc); + kfree(ctx); +} + +static const struct fs_context_operations rdt_fs_context_ops = { + .free = rdt_fs_context_free, + .parse_param = rdt_parse_param, + .get_tree = rdt_get_tree, +}; + +static int rdt_init_fs_context(struct fs_context *fc, struct dentry *reference) +{ + struct rdt_fs_context *ctx; + + ctx = kzalloc(sizeof(struct rdt_fs_context), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + + ctx->kfc.root = rdt_root; + ctx->kfc.magic = RDTGROUP_SUPER_MAGIC; + fc->fs_private = &ctx->kfc; + fc->ops = &rdt_fs_context_ops; + return 0; } static int reset_all_ctrls(struct rdt_resource *r)