Fix for generalization.
This commit is contained in:
@ -70,7 +70,7 @@ struct procfs_data {
|
|||||||
|
|
||||||
struct procfs_list_entry {
|
struct procfs_list_entry {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
struct procfs_data *data;
|
struct proc_dir_entry *entry;
|
||||||
};
|
};
|
||||||
|
|
||||||
LIST_HEAD(procfs_file_list);
|
LIST_HEAD(procfs_file_list);
|
||||||
@ -146,7 +146,7 @@ static int syscall_packet_handler(struct ihk_ikc_channel_desc *c,
|
|||||||
kfree(d);
|
kfree(d);
|
||||||
goto quit;
|
goto quit;
|
||||||
}
|
}
|
||||||
e->data = d;
|
e->entry = entry;
|
||||||
irqflags = ihk_ikc_spinlock_lock(&procfs_file_list_lock);
|
irqflags = ihk_ikc_spinlock_lock(&procfs_file_list_lock);
|
||||||
list_add(&(e->list), &procfs_file_list);
|
list_add(&(e->list), &procfs_file_list);
|
||||||
ihk_ikc_spinlock_unlock(&procfs_file_list_lock, irqflags);
|
ihk_ikc_spinlock_unlock(&procfs_file_list_lock, irqflags);
|
||||||
@ -167,12 +167,17 @@ static int syscall_packet_handler(struct ihk_ikc_channel_desc *c,
|
|||||||
f = ihk_device_map_virtual(dev, parg, sizeof(struct procfs_file), NULL, 0);
|
f = ihk_device_map_virtual(dev, parg, sizeof(struct procfs_file), NULL, 0);
|
||||||
dprintk("ikc: fname: %s.\n", f->fname);
|
dprintk("ikc: fname: %s.\n", f->fname);
|
||||||
list_for_each_entry(e, &procfs_file_list, list) {
|
list_for_each_entry(e, &procfs_file_list, list) {
|
||||||
if (strncmp(e->data->fname, f->fname, PROCFS_NAME_MAX) == 0) {
|
struct procfs_data *d = (struct procfs_data *)e->entry->data;
|
||||||
|
if (d == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (strncmp(d->fname, f->fname, PROCFS_NAME_MAX) == 0) {
|
||||||
dprintk("found and delete an entry in the list.\n");
|
dprintk("found and delete an entry in the list.\n");
|
||||||
irqflags = ihk_ikc_spinlock_lock(&procfs_file_list_lock);
|
irqflags = ihk_ikc_spinlock_lock(&procfs_file_list_lock);
|
||||||
list_del(&e->list);
|
list_del(&e->list);
|
||||||
ihk_ikc_spinlock_unlock(&procfs_file_list_lock, irqflags);
|
ihk_ikc_spinlock_unlock(&procfs_file_list_lock, irqflags);
|
||||||
kfree(e->data);
|
kfree(e->entry->data);
|
||||||
|
e->entry->data = NULL;
|
||||||
kfree(e);
|
kfree(e);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,7 +50,7 @@ void create_proc_procfs_files(int pid, int cpuid)
|
|||||||
{
|
{
|
||||||
char fname[PROCFS_NAME_MAX];
|
char fname[PROCFS_NAME_MAX];
|
||||||
|
|
||||||
snprintf(fname, PROCFS_NAME_MAX, "/proc/mcos%d/%d/mem", osnum, pid);
|
snprintf(fname, PROCFS_NAME_MAX, "mcos%d/%d/mem", osnum, pid);
|
||||||
create_proc_procfs_file(pid, fname, 0400, cpuid);
|
create_proc_procfs_file(pid, fname, 0400, cpuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ void delete_proc_procfs_files(int pid)
|
|||||||
{
|
{
|
||||||
char fname[PROCFS_NAME_MAX];
|
char fname[PROCFS_NAME_MAX];
|
||||||
|
|
||||||
snprintf(fname, PROCFS_NAME_MAX, "/proc/mcos%d/%d/mem", osnum, pid);
|
snprintf(fname, PROCFS_NAME_MAX, "mcos%d/%d/mem", osnum, pid);
|
||||||
delete_proc_procfs_file(pid, fname);
|
delete_proc_procfs_file(pid, fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user