|
@@ -157,11 +157,14 @@ static int show_stat(struct seq_file *p, void *v)
|
|
|
|
|
|
static int stat_open(struct inode *inode, struct file *file)
|
|
static int stat_open(struct inode *inode, struct file *file)
|
|
{
|
|
{
|
|
- unsigned size = 4096 * (1 + num_possible_cpus() / 32);
|
|
|
|
|
|
+ unsigned size = 1024 + 128 * num_possible_cpus();
|
|
char *buf;
|
|
char *buf;
|
|
struct seq_file *m;
|
|
struct seq_file *m;
|
|
int res;
|
|
int res;
|
|
|
|
|
|
|
|
+ /* minimum size to display an interrupt count : 2 bytes */
|
|
|
|
+ size += 2 * nr_irqs;
|
|
|
|
+
|
|
/* don't ask for more than the kmalloc() max size */
|
|
/* don't ask for more than the kmalloc() max size */
|
|
if (size > KMALLOC_MAX_SIZE)
|
|
if (size > KMALLOC_MAX_SIZE)
|
|
size = KMALLOC_MAX_SIZE;
|
|
size = KMALLOC_MAX_SIZE;
|
|
@@ -173,7 +176,7 @@ static int stat_open(struct inode *inode, struct file *file)
|
|
if (!res) {
|
|
if (!res) {
|
|
m = file->private_data;
|
|
m = file->private_data;
|
|
m->buf = buf;
|
|
m->buf = buf;
|
|
- m->size = size;
|
|
|
|
|
|
+ m->size = ksize(buf);
|
|
} else
|
|
} else
|
|
kfree(buf);
|
|
kfree(buf);
|
|
return res;
|
|
return res;
|