Commit e704f043 authored by Nathan Fontenot's avatar Nathan Fontenot Committed by David S. Miller

ibmvnic: Remove debugfs support

The debugfs support in the ibmvnic driver is not, and never has been,
supported. Just remove it.

The work done in the debugfs code for the driver was part of the original
spec for the ibmvnic driver. The corresponding support for this from the
server side was never supported and has been dropped.
Signed-off-by: default avatarNathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 142c6594
......@@ -65,7 +65,6 @@
#include <linux/irq.h>
#include <linux/kthread.h>
#include <linux/seq_file.h>
#include <linux/debugfs.h>
#include <linux/interrupt.h>
#include <net/net_namespace.h>
#include <asm/hvcall.h>
......@@ -615,20 +614,10 @@ static void ibmvnic_release_resources(struct ibmvnic_adapter *adapter)
release_sub_crqs(adapter);
ibmvnic_release_crq_queue(adapter);
if (adapter->debugfs_dir && !IS_ERR(adapter->debugfs_dir))
debugfs_remove_recursive(adapter->debugfs_dir);
if (adapter->stats_token)
dma_unmap_single(dev, adapter->stats_token,
sizeof(struct ibmvnic_statistics),
DMA_FROM_DEVICE);
if (adapter->ras_comps)
dma_free_coherent(dev, adapter->ras_comp_num *
sizeof(struct ibmvnic_fw_component),
adapter->ras_comps, adapter->ras_comps_tok);
kfree(adapter->ras_comp_int);
}
static int ibmvnic_close(struct net_device *netdev)
......@@ -2332,57 +2321,6 @@ static void handle_error_info_rsp(union ibmvnic_crq *crq,
kfree(error_buff);
}
static void handle_dump_size_rsp(union ibmvnic_crq *crq,
struct ibmvnic_adapter *adapter)
{
int len = be32_to_cpu(crq->request_dump_size_rsp.len);
struct ibmvnic_inflight_cmd *inflight_cmd;
struct device *dev = &adapter->vdev->dev;
union ibmvnic_crq newcrq;
unsigned long flags;
/* allocate and map buffer */
adapter->dump_data = kmalloc(len, GFP_KERNEL);
if (!adapter->dump_data) {
complete(&adapter->fw_done);
return;
}
adapter->dump_data_token = dma_map_single(dev, adapter->dump_data, len,
DMA_FROM_DEVICE);
if (dma_mapping_error(dev, adapter->dump_data_token)) {
if (!firmware_has_feature(FW_FEATURE_CMO))
dev_err(dev, "Couldn't map dump data\n");
kfree(adapter->dump_data);
complete(&adapter->fw_done);
return;
}
inflight_cmd = kmalloc(sizeof(*inflight_cmd), GFP_ATOMIC);
if (!inflight_cmd) {
dma_unmap_single(dev, adapter->dump_data_token, len,
DMA_FROM_DEVICE);
kfree(adapter->dump_data);
complete(&adapter->fw_done);
return;
}
memset(&newcrq, 0, sizeof(newcrq));
newcrq.request_dump.first = IBMVNIC_CRQ_CMD;
newcrq.request_dump.cmd = REQUEST_DUMP;
newcrq.request_dump.ioba = cpu_to_be32(adapter->dump_data_token);
newcrq.request_dump.len = cpu_to_be32(adapter->dump_data_size);
memcpy(&inflight_cmd->crq, &newcrq, sizeof(newcrq));
spin_lock_irqsave(&adapter->inflight_lock, flags);
list_add_tail(&inflight_cmd->list, &adapter->inflight);
spin_unlock_irqrestore(&adapter->inflight_lock, flags);
ibmvnic_send_crq(adapter, &newcrq);
}
static void handle_error_indication(union ibmvnic_crq *crq,
struct ibmvnic_adapter *adapter)
{
......@@ -2563,7 +2501,6 @@ static int handle_login_rsp(union ibmvnic_crq *login_rsp_crq,
struct device *dev = &adapter->vdev->dev;
struct ibmvnic_login_rsp_buffer *login_rsp = adapter->login_rsp_buf;
struct ibmvnic_login_buffer *login = adapter->login_buf;
union ibmvnic_crq crq;
int i;
dma_unmap_single(dev, adapter->login_buf_token, adapter->login_buf_sz,
......@@ -2598,11 +2535,6 @@ static int handle_login_rsp(union ibmvnic_crq *login_rsp_crq,
}
complete(&adapter->init_done);
memset(&crq, 0, sizeof(crq));
crq.request_ras_comp_num.first = IBMVNIC_CRQ_CMD;
crq.request_ras_comp_num.cmd = REQUEST_RAS_COMP_NUM;
ibmvnic_send_crq(adapter, &crq);
return 0;
}
......@@ -2838,476 +2770,6 @@ static void handle_query_cap_rsp(union ibmvnic_crq *crq,
}
}
static void handle_control_ras_rsp(union ibmvnic_crq *crq,
struct ibmvnic_adapter *adapter)
{
u8 correlator = crq->control_ras_rsp.correlator;
struct device *dev = &adapter->vdev->dev;
bool found = false;
int i;
if (crq->control_ras_rsp.rc.code) {
dev_warn(dev, "Control ras failed rc=%d\n",
crq->control_ras_rsp.rc.code);
return;
}
for (i = 0; i < adapter->ras_comp_num; i++) {
if (adapter->ras_comps[i].correlator == correlator) {
found = true;
break;
}
}
if (!found) {
dev_warn(dev, "Correlator not found on control_ras_rsp\n");
return;
}
switch (crq->control_ras_rsp.op) {
case IBMVNIC_TRACE_LEVEL:
adapter->ras_comps[i].trace_level = crq->control_ras.level;
break;
case IBMVNIC_ERROR_LEVEL:
adapter->ras_comps[i].error_check_level =
crq->control_ras.level;
break;
case IBMVNIC_TRACE_PAUSE:
adapter->ras_comp_int[i].paused = 1;
break;
case IBMVNIC_TRACE_RESUME:
adapter->ras_comp_int[i].paused = 0;
break;
case IBMVNIC_TRACE_ON:
adapter->ras_comps[i].trace_on = 1;
break;
case IBMVNIC_TRACE_OFF:
adapter->ras_comps[i].trace_on = 0;
break;
case IBMVNIC_CHG_TRACE_BUFF_SZ:
/* trace_buff_sz is 3 bytes, stuff it into an int */
((u8 *)(&adapter->ras_comps[i].trace_buff_size))[0] = 0;
((u8 *)(&adapter->ras_comps[i].trace_buff_size))[1] =
crq->control_ras_rsp.trace_buff_sz[0];
((u8 *)(&adapter->ras_comps[i].trace_buff_size))[2] =
crq->control_ras_rsp.trace_buff_sz[1];
((u8 *)(&adapter->ras_comps[i].trace_buff_size))[3] =
crq->control_ras_rsp.trace_buff_sz[2];
break;
default:
dev_err(dev, "invalid op %d on control_ras_rsp",
crq->control_ras_rsp.op);
}
}
static ssize_t trace_read(struct file *file, char __user *user_buf, size_t len,
loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
struct device *dev = &adapter->vdev->dev;
struct ibmvnic_fw_trace_entry *trace;
int num = ras_comp_int->num;
union ibmvnic_crq crq;
dma_addr_t trace_tok;
if (*ppos >= be32_to_cpu(adapter->ras_comps[num].trace_buff_size))
return 0;
trace =
dma_alloc_coherent(dev,
be32_to_cpu(adapter->ras_comps[num].
trace_buff_size), &trace_tok,
GFP_KERNEL);
if (!trace) {
dev_err(dev, "Couldn't alloc trace buffer\n");
return 0;
}
memset(&crq, 0, sizeof(crq));
crq.collect_fw_trace.first = IBMVNIC_CRQ_CMD;
crq.collect_fw_trace.cmd = COLLECT_FW_TRACE;
crq.collect_fw_trace.correlator = adapter->ras_comps[num].correlator;
crq.collect_fw_trace.ioba = cpu_to_be32(trace_tok);
crq.collect_fw_trace.len = adapter->ras_comps[num].trace_buff_size;
init_completion(&adapter->fw_done);
ibmvnic_send_crq(adapter, &crq);
wait_for_completion(&adapter->fw_done);
if (*ppos + len > be32_to_cpu(adapter->ras_comps[num].trace_buff_size))
len =
be32_to_cpu(adapter->ras_comps[num].trace_buff_size) -
*ppos;
copy_to_user(user_buf, &((u8 *)trace)[*ppos], len);
dma_free_coherent(dev,
be32_to_cpu(adapter->ras_comps[num].trace_buff_size),
trace, trace_tok);
*ppos += len;
return len;
}
static const struct file_operations trace_ops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = trace_read,
};
static ssize_t paused_read(struct file *file, char __user *user_buf, size_t len,
loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
int num = ras_comp_int->num;
char buff[5]; /* 1 or 0 plus \n and \0 */
int size;
size = sprintf(buff, "%d\n", adapter->ras_comp_int[num].paused);
if (*ppos >= size)
return 0;
copy_to_user(user_buf, buff, size);
*ppos += size;
return size;
}
static ssize_t paused_write(struct file *file, const char __user *user_buf,
size_t len, loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
int num = ras_comp_int->num;
union ibmvnic_crq crq;
unsigned long val;
char buff[9]; /* decimal max int plus \n and \0 */
copy_from_user(buff, user_buf, sizeof(buff));
val = kstrtoul(buff, 10, NULL);
adapter->ras_comp_int[num].paused = val ? 1 : 0;
memset(&crq, 0, sizeof(crq));
crq.control_ras.first = IBMVNIC_CRQ_CMD;
crq.control_ras.cmd = CONTROL_RAS;
crq.control_ras.correlator = adapter->ras_comps[num].correlator;
crq.control_ras.op = val ? IBMVNIC_TRACE_PAUSE : IBMVNIC_TRACE_RESUME;
ibmvnic_send_crq(adapter, &crq);
return len;
}
static const struct file_operations paused_ops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = paused_read,
.write = paused_write,
};
static ssize_t tracing_read(struct file *file, char __user *user_buf,
size_t len, loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
int num = ras_comp_int->num;
char buff[5]; /* 1 or 0 plus \n and \0 */
int size;
size = sprintf(buff, "%d\n", adapter->ras_comps[num].trace_on);
if (*ppos >= size)
return 0;
copy_to_user(user_buf, buff, size);
*ppos += size;
return size;
}
static ssize_t tracing_write(struct file *file, const char __user *user_buf,
size_t len, loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
int num = ras_comp_int->num;
union ibmvnic_crq crq;
unsigned long val;
char buff[9]; /* decimal max int plus \n and \0 */
copy_from_user(buff, user_buf, sizeof(buff));
val = kstrtoul(buff, 10, NULL);
memset(&crq, 0, sizeof(crq));
crq.control_ras.first = IBMVNIC_CRQ_CMD;
crq.control_ras.cmd = CONTROL_RAS;
crq.control_ras.correlator = adapter->ras_comps[num].correlator;
crq.control_ras.op = val ? IBMVNIC_TRACE_ON : IBMVNIC_TRACE_OFF;
return len;
}
static const struct file_operations tracing_ops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = tracing_read,
.write = tracing_write,
};
static ssize_t error_level_read(struct file *file, char __user *user_buf,
size_t len, loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
int num = ras_comp_int->num;
char buff[5]; /* decimal max char plus \n and \0 */
int size;
size = sprintf(buff, "%d\n", adapter->ras_comps[num].error_check_level);
if (*ppos >= size)
return 0;
copy_to_user(user_buf, buff, size);
*ppos += size;
return size;
}
static ssize_t error_level_write(struct file *file, const char __user *user_buf,
size_t len, loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
int num = ras_comp_int->num;
union ibmvnic_crq crq;
unsigned long val;
char buff[9]; /* decimal max int plus \n and \0 */
copy_from_user(buff, user_buf, sizeof(buff));
val = kstrtoul(buff, 10, NULL);
if (val > 9)
val = 9;
memset(&crq, 0, sizeof(crq));
crq.control_ras.first = IBMVNIC_CRQ_CMD;
crq.control_ras.cmd = CONTROL_RAS;
crq.control_ras.correlator = adapter->ras_comps[num].correlator;
crq.control_ras.op = IBMVNIC_ERROR_LEVEL;
crq.control_ras.level = val;
ibmvnic_send_crq(adapter, &crq);
return len;
}
static const struct file_operations error_level_ops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = error_level_read,
.write = error_level_write,
};
static ssize_t trace_level_read(struct file *file, char __user *user_buf,
size_t len, loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
int num = ras_comp_int->num;
char buff[5]; /* decimal max char plus \n and \0 */
int size;
size = sprintf(buff, "%d\n", adapter->ras_comps[num].trace_level);
if (*ppos >= size)
return 0;
copy_to_user(user_buf, buff, size);
*ppos += size;
return size;
}
static ssize_t trace_level_write(struct file *file, const char __user *user_buf,
size_t len, loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
union ibmvnic_crq crq;
unsigned long val;
char buff[9]; /* decimal max int plus \n and \0 */
copy_from_user(buff, user_buf, sizeof(buff));
val = kstrtoul(buff, 10, NULL);
if (val > 9)
val = 9;
memset(&crq, 0, sizeof(crq));
crq.control_ras.first = IBMVNIC_CRQ_CMD;
crq.control_ras.cmd = CONTROL_RAS;
crq.control_ras.correlator =
adapter->ras_comps[ras_comp_int->num].correlator;
crq.control_ras.op = IBMVNIC_TRACE_LEVEL;
crq.control_ras.level = val;
ibmvnic_send_crq(adapter, &crq);
return len;
}
static const struct file_operations trace_level_ops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = trace_level_read,
.write = trace_level_write,
};
static ssize_t trace_buff_size_read(struct file *file, char __user *user_buf,
size_t len, loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
int num = ras_comp_int->num;
char buff[9]; /* decimal max int plus \n and \0 */
int size;
size = sprintf(buff, "%d\n", adapter->ras_comps[num].trace_buff_size);
if (*ppos >= size)
return 0;
copy_to_user(user_buf, buff, size);
*ppos += size;
return size;
}
static ssize_t trace_buff_size_write(struct file *file,
const char __user *user_buf, size_t len,
loff_t *ppos)
{
struct ibmvnic_fw_comp_internal *ras_comp_int = file->private_data;
struct ibmvnic_adapter *adapter = ras_comp_int->adapter;
union ibmvnic_crq crq;
unsigned long val;
char buff[9]; /* decimal max int plus \n and \0 */
copy_from_user(buff, user_buf, sizeof(buff));
val = kstrtoul(buff, 10, NULL);
memset(&crq, 0, sizeof(crq));
crq.control_ras.first = IBMVNIC_CRQ_CMD;
crq.control_ras.cmd = CONTROL_RAS;
crq.control_ras.correlator =
adapter->ras_comps[ras_comp_int->num].correlator;
crq.control_ras.op = IBMVNIC_CHG_TRACE_BUFF_SZ;
/* trace_buff_sz is 3 bytes, stuff an int into it */
crq.control_ras.trace_buff_sz[0] = ((u8 *)(&val))[5];
crq.control_ras.trace_buff_sz[1] = ((u8 *)(&val))[6];
crq.control_ras.trace_buff_sz[2] = ((u8 *)(&val))[7];
ibmvnic_send_crq(adapter, &crq);
return len;
}
static const struct file_operations trace_size_ops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = trace_buff_size_read,
.write = trace_buff_size_write,
};
static void handle_request_ras_comps_rsp(union ibmvnic_crq *crq,
struct ibmvnic_adapter *adapter)
{
struct device *dev = &adapter->vdev->dev;
struct dentry *dir_ent;
struct dentry *ent;
int i;
debugfs_remove_recursive(adapter->ras_comps_ent);
adapter->ras_comps_ent = debugfs_create_dir("ras_comps",
adapter->debugfs_dir);
if (!adapter->ras_comps_ent || IS_ERR(adapter->ras_comps_ent)) {
dev_info(dev, "debugfs create ras_comps dir failed\n");
return;
}
for (i = 0; i < adapter->ras_comp_num; i++) {
dir_ent = debugfs_create_dir(adapter->ras_comps[i].name,
adapter->ras_comps_ent);
if (!dir_ent || IS_ERR(dir_ent)) {
dev_info(dev, "debugfs create %s dir failed\n",
adapter->ras_comps[i].name);
continue;
}
adapter->ras_comp_int[i].adapter = adapter;
adapter->ras_comp_int[i].num = i;
adapter->ras_comp_int[i].desc_blob.data =
&adapter->ras_comps[i].description;
adapter->ras_comp_int[i].desc_blob.size =
sizeof(adapter->ras_comps[i].description);
/* Don't need to remember the dentry's because the debugfs dir
* gets removed recursively
*/
ent = debugfs_create_blob("description", S_IRUGO, dir_ent,
&adapter->ras_comp_int[i].desc_blob);
ent = debugfs_create_file("trace_buf_size", S_IRUGO | S_IWUSR,
dir_ent, &adapter->ras_comp_int[i],
&trace_size_ops);
ent = debugfs_create_file("trace_level",
S_IRUGO |
(adapter->ras_comps[i].trace_level !=
0xFF ? S_IWUSR : 0),
dir_ent, &adapter->ras_comp_int[i],
&trace_level_ops);
ent = debugfs_create_file("error_level",
S_IRUGO |
(adapter->
ras_comps[i].error_check_level !=
0xFF ? S_IWUSR : 0),
dir_ent, &adapter->ras_comp_int[i],
&trace_level_ops);
ent = debugfs_create_file("tracing", S_IRUGO | S_IWUSR,
dir_ent, &adapter->ras_comp_int[i],
&tracing_ops);
ent = debugfs_create_file("paused", S_IRUGO | S_IWUSR,
dir_ent, &adapter->ras_comp_int[i],
&paused_ops);
ent = debugfs_create_file("trace", S_IRUGO, dir_ent,
&adapter->ras_comp_int[i],
&trace_ops);
}
}
static void handle_request_ras_comp_num_rsp(union ibmvnic_crq *crq,
struct ibmvnic_adapter *adapter)
{
int len = adapter->ras_comp_num * sizeof(struct ibmvnic_fw_component);
struct device *dev = &adapter->vdev->dev;
union ibmvnic_crq newcrq;
adapter->ras_comps = dma_alloc_coherent(dev, len,
&adapter->ras_comps_tok,
GFP_KERNEL);
if (!adapter->ras_comps) {
if (!firmware_has_feature(FW_FEATURE_CMO))
dev_err(dev, "Couldn't alloc fw comps buffer\n");
return;
}
adapter->ras_comp_int = kmalloc(adapter->ras_comp_num *
sizeof(struct ibmvnic_fw_comp_internal),
GFP_KERNEL);
if (!adapter->ras_comp_int)
dma_free_coherent(dev, len, adapter->ras_comps,
adapter->ras_comps_tok);
memset(&newcrq, 0, sizeof(newcrq));
newcrq.request_ras_comps.first = IBMVNIC_CRQ_CMD;
newcrq.request_ras_comps.cmd = REQUEST_RAS_COMPS;
newcrq.request_ras_comps.ioba = cpu_to_be32(adapter->ras_comps_tok);
newcrq.request_ras_comps.len = cpu_to_be32(len);
ibmvnic_send_crq(adapter, &newcrq);
}
static void ibmvnic_free_inflight(struct ibmvnic_adapter *adapter)
{
struct ibmvnic_inflight_cmd *inflight_cmd, *tmp1;
......@@ -3329,9 +2791,6 @@ static void ibmvnic_free_inflight(struct ibmvnic_adapter *adapter)
kfree(adapter->login_rsp_buf);
kfree(adapter->login_buf);
break;
case REQUEST_DUMP:
complete(&adapter->fw_done);
break;
case REQUEST_ERROR_INFO:
spin_lock_irqsave(&adapter->error_list_lock, flags2);
list_for_each_entry_safe(error_buff, tmp2,
......@@ -3491,14 +2950,6 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
netdev_dbg(netdev, "Got Statistics Response\n");
complete(&adapter->stats_done);
break;
case REQUEST_DUMP_SIZE_RSP:
netdev_dbg(netdev, "Got Request Dump Size Response\n");
handle_dump_size_rsp(crq, adapter);
break;
case REQUEST_DUMP_RSP:
netdev_dbg(netdev, "Got Request Dump Response\n");
complete(&adapter->fw_done);
break;
case QUERY_IP_OFFLOAD_RSP:
netdev_dbg(netdev, "Got Query IP offload Response\n");
handle_query_ip_offload_rsp(adapter);
......@@ -3513,24 +2964,6 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
DMA_TO_DEVICE);
complete(&adapter->init_done);
break;
case REQUEST_RAS_COMP_NUM_RSP:
netdev_dbg(netdev, "Got Request RAS Comp Num Response\n");
if (crq->request_ras_comp_num_rsp.rc.code == 10) {
netdev_dbg(netdev, "Request RAS Comp Num not supported\n");
break;
}
adapter->ras_comp_num =
be32_to_cpu(crq->request_ras_comp_num_rsp.num_components);
handle_request_ras_comp_num_rsp(crq, adapter);
break;
case REQUEST_RAS_COMPS_RSP:
netdev_dbg(netdev, "Got Request RAS Comps Response\n");
handle_request_ras_comps_rsp(crq, adapter);
break;
case CONTROL_RAS_RSP:
netdev_dbg(netdev, "Got Control RAS Response\n");
handle_control_ras_rsp(crq, adapter);
break;
case COLLECT_FW_TRACE_RSP:
netdev_dbg(netdev, "Got Collect firmware trace Response\n");
complete(&adapter->fw_done);
......@@ -3725,45 +3158,6 @@ static int ibmvnic_init_crq_queue(struct ibmvnic_adapter *adapter)
return retrc;
}
/* debugfs for dump */
static int ibmvnic_dump_show(struct seq_file *seq, void *v)
{
struct net_device *netdev = seq->private;
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
struct device *dev = &adapter->vdev->dev;
union ibmvnic_crq crq;
memset(&crq, 0, sizeof(crq));
crq.request_dump_size.first = IBMVNIC_CRQ_CMD;
crq.request_dump_size.cmd = REQUEST_DUMP_SIZE;
init_completion(&adapter->fw_done);
ibmvnic_send_crq(adapter, &crq);
wait_for_completion(&adapter->fw_done);
seq_write(seq, adapter->dump_data, adapter->dump_data_size);
dma_unmap_single(dev, adapter->dump_data_token, adapter->dump_data_size,
DMA_BIDIRECTIONAL);
kfree(adapter->dump_data);
return 0;
}
static int ibmvnic_dump_open(struct inode *inode, struct file *file)
{
return single_open(file, ibmvnic_dump_show, inode->i_private);
}
static const struct file_operations ibmvnic_dump_ops = {
.owner = THIS_MODULE,
.open = ibmvnic_dump_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static void handle_crq_init_rsp(struct work_struct *work)
{
struct ibmvnic_adapter *adapter = container_of(work,
......@@ -3826,8 +3220,6 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter)
{
struct device *dev = &adapter->vdev->dev;
unsigned long timeout = msecs_to_jiffies(30000);
struct dentry *ent;
char buf[17]; /* debugfs name buf */
int rc;
rc = ibmvnic_init_crq_queue(adapter);
......@@ -3845,30 +3237,10 @@ static int ibmvnic_init(struct ibmvnic_adapter *adapter)
return -ENOMEM;
}
snprintf(buf, sizeof(buf), "ibmvnic_%x", adapter->vdev->unit_address);
ent = debugfs_create_dir(buf, NULL);
if (!ent || IS_ERR(ent)) {
dev_info(dev, "debugfs create directory failed\n");
adapter->debugfs_dir = NULL;
} else {
adapter->debugfs_dir = ent;
ent = debugfs_create_file("dump", S_IRUGO,
adapter->debugfs_dir,
adapter->netdev, &ibmvnic_dump_ops);
if (!ent || IS_ERR(ent)) {
dev_info(dev, "debugfs create dump file failed\n");
adapter->debugfs_dump = NULL;
} else {
adapter->debugfs_dump = ent;
}
}
init_completion(&adapter->init_done);
ibmvnic_send_crq_init(adapter);
if (!wait_for_completion_timeout(&adapter->init_done, timeout)) {
dev_err(dev, "Initialization sequence timed out\n");
if (adapter->debugfs_dir && !IS_ERR(adapter->debugfs_dir))
debugfs_remove_recursive(adapter->debugfs_dir);
ibmvnic_release_crq_queue(adapter);
return -1;
}
......
......@@ -772,20 +772,10 @@ enum ibmvnic_commands {
ERROR_INDICATION = 0x08,
REQUEST_ERROR_INFO = 0x09,
REQUEST_ERROR_RSP = 0x89,
REQUEST_DUMP_SIZE = 0x0A,
REQUEST_DUMP_SIZE_RSP = 0x8A,
REQUEST_DUMP = 0x0B,
REQUEST_DUMP_RSP = 0x8B,
LOGICAL_LINK_STATE = 0x0C,
LOGICAL_LINK_STATE_RSP = 0x8C,
REQUEST_STATISTICS = 0x0D,
REQUEST_STATISTICS_RSP = 0x8D,
REQUEST_RAS_COMP_NUM = 0x0E,
REQUEST_RAS_COMP_NUM_RSP = 0x8E,
REQUEST_RAS_COMPS = 0x0F,
REQUEST_RAS_COMPS_RSP = 0x8F,
CONTROL_RAS = 0x10,
CONTROL_RAS_RSP = 0x90,
COLLECT_FW_TRACE = 0x11,
COLLECT_FW_TRACE_RSP = 0x91,
LINK_STATE_INDICATION = 0x12,
......@@ -806,8 +796,6 @@ enum ibmvnic_commands {
ACL_CHANGE_INDICATION = 0x1A,
ACL_QUERY = 0x1B,
ACL_QUERY_RSP = 0x9B,
REQUEST_DEBUG_STATS = 0x1C,
REQUEST_DEBUG_STATS_RSP = 0x9C,
QUERY_MAP = 0x1D,
QUERY_MAP_RSP = 0x9D,
REQUEST_MAP = 0x1E,
......@@ -925,13 +913,6 @@ struct ibmvnic_error_buff {
__be32 error_id;
};
struct ibmvnic_fw_comp_internal {
struct ibmvnic_adapter *adapter;
int num;
struct debugfs_blob_wrapper desc_blob;
int paused;
};
struct ibmvnic_inflight_cmd {
union ibmvnic_crq crq;
struct list_head list;
......@@ -995,18 +976,7 @@ struct ibmvnic_adapter {
struct list_head errors;
spinlock_t error_list_lock;
/* debugfs */
struct dentry *debugfs_dir;
struct dentry *debugfs_dump;
struct completion fw_done;
char *dump_data;
dma_addr_t dump_data_token;
int dump_data_size;
int ras_comp_num;
struct ibmvnic_fw_component *ras_comps;
struct ibmvnic_fw_comp_internal *ras_comp_int;
dma_addr_t ras_comps_tok;
struct dentry *ras_comps_ent;
/* in-flight commands that allocate and/or map memory*/
struct list_head inflight;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment