salinfo.c (dca3a783400a18e2bf4503b1d4a85c4d0ca1a7e4) salinfo.c (d9dda78bad879595d8c4220a067fc029d6484a16)
1/*
2 * salinfo.c
3 *
4 * Creates entries in /proc/sal for various system features.
5 *
6 * Copyright (c) 2003, 2006 Silicon Graphics, Inc. All rights reserved.
7 * Copyright (c) 2003 Hewlett-Packard Co
8 * Bjorn Helgaas <bjorn.helgaas@hp.com>

--- 287 unchanged lines hidden (view full) ---

296 if (!capable(CAP_SYS_ADMIN))
297 return -EPERM;
298 return 0;
299}
300
301static ssize_t
302salinfo_event_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
303{
1/*
2 * salinfo.c
3 *
4 * Creates entries in /proc/sal for various system features.
5 *
6 * Copyright (c) 2003, 2006 Silicon Graphics, Inc. All rights reserved.
7 * Copyright (c) 2003 Hewlett-Packard Co
8 * Bjorn Helgaas <bjorn.helgaas@hp.com>

--- 287 unchanged lines hidden (view full) ---

296 if (!capable(CAP_SYS_ADMIN))
297 return -EPERM;
298 return 0;
299}
300
301static ssize_t
302salinfo_event_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
303{
304 struct inode *inode = file_inode(file);
305 struct proc_dir_entry *entry = PDE(inode);
306 struct salinfo_data *data = entry->data;
304 struct salinfo_data *data = PDE_DATA(file_inode(file));
307 char cmd[32];
308 size_t size;
309 int i, n, cpu = -1;
310
311retry:
312 if (cpus_empty(data->cpu_event) && down_trylock(&data->mutex)) {
313 if (file->f_flags & O_NONBLOCK)
314 return -EAGAIN;

--- 40 unchanged lines hidden (view full) ---

355 .open = salinfo_event_open,
356 .read = salinfo_event_read,
357 .llseek = noop_llseek,
358};
359
360static int
361salinfo_log_open(struct inode *inode, struct file *file)
362{
305 char cmd[32];
306 size_t size;
307 int i, n, cpu = -1;
308
309retry:
310 if (cpus_empty(data->cpu_event) && down_trylock(&data->mutex)) {
311 if (file->f_flags & O_NONBLOCK)
312 return -EAGAIN;

--- 40 unchanged lines hidden (view full) ---

353 .open = salinfo_event_open,
354 .read = salinfo_event_read,
355 .llseek = noop_llseek,
356};
357
358static int
359salinfo_log_open(struct inode *inode, struct file *file)
360{
363 struct proc_dir_entry *entry = PDE(inode);
364 struct salinfo_data *data = entry->data;
361 struct salinfo_data *data = PDE_DATA(inode);
365
366 if (!capable(CAP_SYS_ADMIN))
367 return -EPERM;
368
369 spin_lock(&data_lock);
370 if (data->open) {
371 spin_unlock(&data_lock);
372 return -EBUSY;

--- 8 unchanged lines hidden (view full) ---

381 }
382
383 return 0;
384}
385
386static int
387salinfo_log_release(struct inode *inode, struct file *file)
388{
362
363 if (!capable(CAP_SYS_ADMIN))
364 return -EPERM;
365
366 spin_lock(&data_lock);
367 if (data->open) {
368 spin_unlock(&data_lock);
369 return -EBUSY;

--- 8 unchanged lines hidden (view full) ---

378 }
379
380 return 0;
381}
382
383static int
384salinfo_log_release(struct inode *inode, struct file *file)
385{
389 struct proc_dir_entry *entry = PDE(inode);
390 struct salinfo_data *data = entry->data;
386 struct salinfo_data *data = PDE_DATA(inode);
391
392 if (data->state == STATE_NO_DATA) {
393 vfree(data->log_buffer);
394 vfree(data->oemdata);
395 data->log_buffer = NULL;
396 data->oemdata = NULL;
397 }
398 spin_lock(&data_lock);

--- 59 unchanged lines hidden (view full) ---

458 } else {
459 data->state = STATE_LOG_RECORD;
460 }
461}
462
463static ssize_t
464salinfo_log_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
465{
387
388 if (data->state == STATE_NO_DATA) {
389 vfree(data->log_buffer);
390 vfree(data->oemdata);
391 data->log_buffer = NULL;
392 data->oemdata = NULL;
393 }
394 spin_lock(&data_lock);

--- 59 unchanged lines hidden (view full) ---

454 } else {
455 data->state = STATE_LOG_RECORD;
456 }
457}
458
459static ssize_t
460salinfo_log_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
461{
466 struct inode *inode = file_inode(file);
467 struct proc_dir_entry *entry = PDE(inode);
468 struct salinfo_data *data = entry->data;
462 struct salinfo_data *data = PDE_DATA(file_inode(file));
469 u8 *buf;
470 u64 bufsize;
471
472 if (data->state == STATE_LOG_RECORD) {
473 buf = data->log_buffer;
474 bufsize = data->log_size;
475 } else if (data->state == STATE_OEMDATA) {
476 buf = data->oemdata;

--- 42 unchanged lines hidden (view full) ---

519 spin_unlock_irqrestore(&data_saved_lock, flags);
520 }
521 return 0;
522}
523
524static ssize_t
525salinfo_log_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
526{
463 u8 *buf;
464 u64 bufsize;
465
466 if (data->state == STATE_LOG_RECORD) {
467 buf = data->log_buffer;
468 bufsize = data->log_size;
469 } else if (data->state == STATE_OEMDATA) {
470 buf = data->oemdata;

--- 42 unchanged lines hidden (view full) ---

513 spin_unlock_irqrestore(&data_saved_lock, flags);
514 }
515 return 0;
516}
517
518static ssize_t
519salinfo_log_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
520{
527 struct inode *inode = file_inode(file);
528 struct proc_dir_entry *entry = PDE(inode);
529 struct salinfo_data *data = entry->data;
521 struct salinfo_data *data = PDE_DATA(file_inode(file));
530 char cmd[32];
531 size_t size;
532 u32 offset;
533 int cpu;
534
535 size = sizeof(cmd);
536 if (count < size)
537 size = count;

--- 168 unchanged lines hidden ---
522 char cmd[32];
523 size_t size;
524 u32 offset;
525 int cpu;
526
527 size = sizeof(cmd);
528 if (count < size)
529 size = count;

--- 168 unchanged lines hidden ---