patch-2.4.19 linux-2.4.19/fs/proc/proc_misc.c
Next file: linux-2.4.19/fs/proc/root.c
Previous file: linux-2.4.19/fs/proc/kcore.c
Back to the patch index
Back to the overall index
- Lines: 219
- Date:
Fri Aug 2 17:39:45 2002
- Orig file:
linux-2.4.18/fs/proc/proc_misc.c
- Orig date:
Tue Nov 20 21:29:09 2001
diff -urN linux-2.4.18/fs/proc/proc_misc.c linux-2.4.19/fs/proc/proc_misc.c
@@ -41,7 +41,6 @@
#include <asm/pgtable.h>
#include <asm/io.h>
-
#define LOAD_INT(x) ((x) >> FSHIFT)
#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
/*
@@ -50,6 +49,8 @@
* have a way to deal with that gracefully. Right now I used straightforward
* wrappers, but this needs further analysis wrt potential overflows.
*/
+extern int get_hardware_list(char *);
+extern int get_stram_list(char *);
#ifdef CONFIG_MODULES
extern int get_module_list(char *);
#endif
@@ -65,6 +66,27 @@
extern int get_ds1286_status(char *);
#endif
+void proc_sprintf(char *page, off_t *off, int *lenp, const char *format, ...)
+{
+ int len = *lenp;
+ va_list args;
+
+ /* try to only print whole lines */
+ if (len > PAGE_SIZE-512)
+ return;
+
+ va_start(args, format);
+ len += vsnprintf(page + len, PAGE_SIZE-len, format, args);
+ va_end(args);
+
+ if (len <= *off) {
+ *off -= len;
+ len = 0;
+ }
+
+ *lenp = len;
+}
+
static int proc_calc_metrics(char *page, char **start, off_t off,
int count, int *eof, int len)
{
@@ -214,6 +236,24 @@
release: seq_release,
};
+#ifdef CONFIG_PROC_HARDWARE
+static int hardware_read_proc(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ int len = get_hardware_list(page);
+ return proc_calc_metrics(page, start, off, count, eof, len);
+}
+#endif
+
+#ifdef CONFIG_STRAM_PROC
+static int stram_read_proc(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ int len = get_stram_list(page);
+ return proc_calc_metrics(page, start, off, count, eof, len);
+}
+#endif
+
#ifdef CONFIG_MODULES
static int modules_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
@@ -235,10 +275,24 @@
};
#endif
+extern struct seq_operations slabinfo_op;
+extern ssize_t slabinfo_write(struct file *, const char *, size_t, loff_t *);
+static int slabinfo_open(struct inode *inode, struct file *file)
+{
+ return seq_open(file, &slabinfo_op);
+}
+static struct file_operations proc_slabinfo_operations = {
+ open: slabinfo_open,
+ read: seq_read,
+ write: slabinfo_write,
+ llseek: seq_lseek,
+ release: seq_release,
+};
+
static int kstat_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
- int i, len;
+ int i, len = 0;
extern unsigned long total_forks;
unsigned long jif = jiffies;
unsigned int sum = 0, user = 0, nice = 0, system = 0;
@@ -256,10 +310,12 @@
#endif
}
- len = sprintf(page, "cpu %u %u %u %lu\n", user, nice, system,
+ proc_sprintf(page, &off, &len,
+ "cpu %u %u %u %lu\n", user, nice, system,
jif * smp_num_cpus - (user + nice + system));
for (i = 0 ; i < smp_num_cpus; i++)
- len += sprintf(page + len, "cpu%d %u %u %u %lu\n",
+ proc_sprintf(page, &off, &len,
+ "cpu%d %u %u %u %lu\n",
i,
kstat.per_cpu_user[cpu_logical_map(i)],
kstat.per_cpu_nice[cpu_logical_map(i)],
@@ -267,7 +323,7 @@
jif - ( kstat.per_cpu_user[cpu_logical_map(i)] \
+ kstat.per_cpu_nice[cpu_logical_map(i)] \
+ kstat.per_cpu_system[cpu_logical_map(i)]));
- len += sprintf(page + len,
+ proc_sprintf(page, &off, &len,
"page %u %u\n"
"swap %u %u\n"
"intr %u",
@@ -279,10 +335,11 @@
);
#if !defined(CONFIG_ARCH_S390)
for (i = 0 ; i < NR_IRQS ; i++)
- len += sprintf(page + len, " %u", kstat_irqs(i));
+ proc_sprintf(page, &off, &len,
+ " %u", kstat_irqs(i));
#endif
- len += sprintf(page + len, "\ndisk_io: ");
+ proc_sprintf(page, &off, &len, "\ndisk_io: ");
for (major = 0; major < DK_MAX_MAJOR; major++) {
for (disk = 0; disk < DK_MAX_DISK; disk++) {
@@ -290,7 +347,7 @@
kstat.dk_drive_rblk[major][disk] +
kstat.dk_drive_wblk[major][disk];
if (active)
- len += sprintf(page + len,
+ proc_sprintf(page, &off, &len,
"(%u,%u):(%u,%u,%u,%u,%u) ",
major, disk,
kstat.dk_drive[major][disk],
@@ -302,7 +359,7 @@
}
}
- len += sprintf(page + len,
+ proc_sprintf(page, &off, &len,
"\nctxt %u\n"
"btime %lu\n"
"processes %lu\n",
@@ -364,8 +421,7 @@
extern char saved_command_line[];
int len;
- len = sprintf(page, "%s\n", saved_command_line);
- len = strlen(page);
+ len = snprintf(page, count, "%s\n", saved_command_line);
return proc_calc_metrics(page, start, off, count, eof, len);
}
@@ -473,18 +529,6 @@
write: write_profile,
};
-extern struct seq_operations mounts_op;
-static int mounts_open(struct inode *inode, struct file *file)
-{
- return seq_open(file, &mounts_op);
-}
-static struct file_operations proc_mounts_operations = {
- open: mounts_open,
- read: seq_read,
- llseek: seq_lseek,
- release: seq_release,
-};
-
struct proc_dir_entry *proc_root_kcore;
static void create_seq_entry(char *name, mode_t mode, struct file_operations *f)
@@ -506,6 +550,12 @@
{"uptime", uptime_read_proc},
{"meminfo", meminfo_read_proc},
{"version", version_read_proc},
+#ifdef CONFIG_PROC_HARDWARE
+ {"hardware", hardware_read_proc},
+#endif
+#ifdef CONFIG_STRAM_PROC
+ {"stram", stram_read_proc},
+#endif
#ifdef CONFIG_MODULES
{"modules", modules_read_proc},
#endif
@@ -531,12 +581,14 @@
for (p = simple_ones; p->name; p++)
create_proc_read_entry(p->name, 0, NULL, p->read_proc, NULL);
+ proc_symlink("mounts", NULL, "self/mounts");
+
/* And now for trickier ones */
entry = create_proc_entry("kmsg", S_IRUSR, &proc_root);
if (entry)
entry->proc_fops = &proc_kmsg_operations;
- create_seq_entry("mounts", 0, &proc_mounts_operations);
create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations);
+ create_seq_entry("slabinfo",S_IWUSR|S_IRUGO,&proc_slabinfo_operations);
#ifdef CONFIG_MODULES
create_seq_entry("ksyms", 0, &proc_ksyms_operations);
#endif
@@ -561,8 +613,4 @@
entry->proc_fops = &ppc_htab_operations;
}
#endif
- entry = create_proc_read_entry("slabinfo", S_IWUSR | S_IRUGO, NULL,
- slabinfo_read_proc, NULL);
- if (entry)
- entry->write_proc = slabinfo_write_proc;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)