|
@@ -1309,51 +1309,35 @@ static const struct attribute_group port_attribute_group = {
|
|
|
.attrs = port_sysfs_entries,
|
|
|
};
|
|
|
|
|
|
-static ssize_t debugfs_read(struct file *filp, char __user *ubuf,
|
|
|
- size_t count, loff_t *offp)
|
|
|
+static int debugfs_show(struct seq_file *s, void *data)
|
|
|
{
|
|
|
- struct port *port;
|
|
|
- char *buf;
|
|
|
- ssize_t ret, out_offset, out_count;
|
|
|
+ struct port *port = s->private;
|
|
|
+
|
|
|
+ seq_printf(s, "name: %s\n", port->name ? port->name : "");
|
|
|
+ seq_printf(s, "guest_connected: %d\n", port->guest_connected);
|
|
|
+ seq_printf(s, "host_connected: %d\n", port->host_connected);
|
|
|
+ seq_printf(s, "outvq_full: %d\n", port->outvq_full);
|
|
|
+ seq_printf(s, "bytes_sent: %lu\n", port->stats.bytes_sent);
|
|
|
+ seq_printf(s, "bytes_received: %lu\n", port->stats.bytes_received);
|
|
|
+ seq_printf(s, "bytes_discarded: %lu\n", port->stats.bytes_discarded);
|
|
|
+ seq_printf(s, "is_console: %s\n",
|
|
|
+ is_console_port(port) ? "yes" : "no");
|
|
|
+ seq_printf(s, "console_vtermno: %u\n", port->cons.vtermno);
|
|
|
|
|
|
- out_count = 1024;
|
|
|
- buf = kmalloc(out_count, GFP_KERNEL);
|
|
|
- if (!buf)
|
|
|
- return -ENOMEM;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
|
|
|
- port = filp->private_data;
|
|
|
- out_offset = 0;
|
|
|
- out_offset += snprintf(buf + out_offset, out_count,
|
|
|
- "name: %s\n", port->name ? port->name : "");
|
|
|
- out_offset += snprintf(buf + out_offset, out_count - out_offset,
|
|
|
- "guest_connected: %d\n", port->guest_connected);
|
|
|
- out_offset += snprintf(buf + out_offset, out_count - out_offset,
|
|
|
- "host_connected: %d\n", port->host_connected);
|
|
|
- out_offset += snprintf(buf + out_offset, out_count - out_offset,
|
|
|
- "outvq_full: %d\n", port->outvq_full);
|
|
|
- out_offset += snprintf(buf + out_offset, out_count - out_offset,
|
|
|
- "bytes_sent: %lu\n", port->stats.bytes_sent);
|
|
|
- out_offset += snprintf(buf + out_offset, out_count - out_offset,
|
|
|
- "bytes_received: %lu\n",
|
|
|
- port->stats.bytes_received);
|
|
|
- out_offset += snprintf(buf + out_offset, out_count - out_offset,
|
|
|
- "bytes_discarded: %lu\n",
|
|
|
- port->stats.bytes_discarded);
|
|
|
- out_offset += snprintf(buf + out_offset, out_count - out_offset,
|
|
|
- "is_console: %s\n",
|
|
|
- is_console_port(port) ? "yes" : "no");
|
|
|
- out_offset += snprintf(buf + out_offset, out_count - out_offset,
|
|
|
- "console_vtermno: %u\n", port->cons.vtermno);
|
|
|
-
|
|
|
- ret = simple_read_from_buffer(ubuf, count, offp, buf, out_offset);
|
|
|
- kfree(buf);
|
|
|
- return ret;
|
|
|
+static int debugfs_open(struct inode *inode, struct file *file)
|
|
|
+{
|
|
|
+ return single_open(file, debugfs_show, inode->i_private);
|
|
|
}
|
|
|
|
|
|
static const struct file_operations port_debugfs_ops = {
|
|
|
.owner = THIS_MODULE,
|
|
|
- .open = simple_open,
|
|
|
- .read = debugfs_read,
|
|
|
+ .open = debugfs_open,
|
|
|
+ .read = seq_read,
|
|
|
+ .llseek = seq_lseek,
|
|
|
+ .release = single_release,
|
|
|
};
|
|
|
|
|
|
static void set_console_size(struct port *port, u16 rows, u16 cols)
|