if (count < strlen(buf)) {
kfree(buf); return -ENOSPC;
}
len = simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf));
kfree(buf); return len;
}
/** * ixgbe_dbg_reg_ops_read - read for reg_ops datum * @filp: the opened file * @buffer: where to write the data for the user to read * @count: the size of the user's buffer * @ppos: file position offset
**/ static ssize_t ixgbe_dbg_reg_ops_read(struct file *filp, char __user *buffer,
size_t count, loff_t *ppos)
{ return ixgbe_dbg_common_ops_read(filp, buffer, count, ppos,
ixgbe_dbg_reg_ops_buf);
}
/** * ixgbe_dbg_reg_ops_write - write into reg_ops datum * @filp: the opened file * @buffer: where to find the user's data * @count: the length of the user's data * @ppos: file position offset
**/ static ssize_t ixgbe_dbg_reg_ops_write(struct file *filp, constchar __user *buffer,
size_t count, loff_t *ppos)
{ struct ixgbe_adapter *adapter = filp->private_data; int len;
/* don't allow partial writes */ if (*ppos != 0) return 0; if (count >= sizeof(ixgbe_dbg_reg_ops_buf)) return -ENOSPC;
len = simple_write_to_buffer(ixgbe_dbg_reg_ops_buf, sizeof(ixgbe_dbg_reg_ops_buf)-1,
ppos,
buffer,
count); if (len < 0) return len;
/** * ixgbe_dbg_netdev_ops_read - read for netdev_ops datum * @filp: the opened file * @buffer: where to write the data for the user to read * @count: the size of the user's buffer * @ppos: file position offset
**/ static ssize_t ixgbe_dbg_netdev_ops_read(struct file *filp, char __user *buffer,
size_t count, loff_t *ppos)
{ return ixgbe_dbg_common_ops_read(filp, buffer, count, ppos,
ixgbe_dbg_netdev_ops_buf);
}
/** * ixgbe_dbg_netdev_ops_write - write into netdev_ops datum * @filp: the opened file * @buffer: where to find the user's data * @count: the length of the user's data * @ppos: file position offset
**/ static ssize_t ixgbe_dbg_netdev_ops_write(struct file *filp, constchar __user *buffer,
size_t count, loff_t *ppos)
{ struct ixgbe_adapter *adapter = filp->private_data; int len;
/* don't allow partial writes */ if (*ppos != 0) return 0; if (count >= sizeof(ixgbe_dbg_netdev_ops_buf)) return -ENOSPC;
len = simple_write_to_buffer(ixgbe_dbg_netdev_ops_buf, sizeof(ixgbe_dbg_netdev_ops_buf)-1,
ppos,
buffer,
count); if (len < 0) return len;
ixgbe_dbg_netdev_ops_buf[len] = '\0';
if (strncmp(ixgbe_dbg_netdev_ops_buf, "tx_timeout", 10) == 0) { /* TX Queue number below is wrong, but ixgbe does not use it */
adapter->netdev->netdev_ops->ndo_tx_timeout(adapter->netdev,
UINT_MAX);
e_dev_info("tx_timeout called\n");
} else {
e_dev_info("Unknown command: %s\n", ixgbe_dbg_netdev_ops_buf);
e_dev_info("Available commands:\n");
e_dev_info(" tx_timeout\n");
} return count;
}
/** * ixgbe_dbg_adapter_init - setup the debugfs directory for the adapter * @adapter: the adapter that is starting up
**/ void ixgbe_dbg_adapter_init(struct ixgbe_adapter *adapter)
{ constchar *name = pci_name(adapter->pdev);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.