cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

smc_sysctl.c (1466B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 *  Shared Memory Communications over RDMA (SMC-R) and RoCE
      4 *
      5 *  smc_sysctl.c: sysctl interface to SMC subsystem.
      6 *
      7 *  Copyright (c) 2022, Alibaba Inc.
      8 *
      9 *  Author: Tony Lu <tonylu@linux.alibaba.com>
     10 *
     11 */
     12
     13#include <linux/init.h>
     14#include <linux/sysctl.h>
     15#include <net/net_namespace.h>
     16
     17#include "smc.h"
     18#include "smc_sysctl.h"
     19
     20static struct ctl_table smc_table[] = {
     21	{
     22		.procname       = "autocorking_size",
     23		.data           = &init_net.smc.sysctl_autocorking_size,
     24		.maxlen         = sizeof(unsigned int),
     25		.mode           = 0644,
     26		.proc_handler	= proc_douintvec,
     27	},
     28	{  }
     29};
     30
     31int __net_init smc_sysctl_net_init(struct net *net)
     32{
     33	struct ctl_table *table;
     34
     35	table = smc_table;
     36	if (!net_eq(net, &init_net)) {
     37		int i;
     38
     39		table = kmemdup(table, sizeof(smc_table), GFP_KERNEL);
     40		if (!table)
     41			goto err_alloc;
     42
     43		for (i = 0; i < ARRAY_SIZE(smc_table) - 1; i++)
     44			table[i].data += (void *)net - (void *)&init_net;
     45	}
     46
     47	net->smc.smc_hdr = register_net_sysctl(net, "net/smc", table);
     48	if (!net->smc.smc_hdr)
     49		goto err_reg;
     50
     51	net->smc.sysctl_autocorking_size = SMC_AUTOCORKING_DEFAULT_SIZE;
     52
     53	return 0;
     54
     55err_reg:
     56	if (!net_eq(net, &init_net))
     57		kfree(table);
     58err_alloc:
     59	return -ENOMEM;
     60}
     61
     62void __net_exit smc_sysctl_net_exit(struct net *net)
     63{
     64	struct ctl_table *table;
     65
     66	table = net->smc.smc_hdr->ctl_table_arg;
     67	unregister_net_sysctl_table(net->smc.smc_hdr);
     68	if (!net_eq(net, &init_net))
     69		kfree(table);
     70}