Commit 223ddcea authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
parents ca412cc9 3e03a2fc
...@@ -618,7 +618,7 @@ appldata_offline_cpu(int cpu) ...@@ -618,7 +618,7 @@ appldata_offline_cpu(int cpu)
} }
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
static int static int __cpuinit
appldata_cpu_notify(struct notifier_block *self, appldata_cpu_notify(struct notifier_block *self,
unsigned long action, void *hcpu) unsigned long action, void *hcpu)
{ {
......
...@@ -129,7 +129,7 @@ void __init paging_init(void) ...@@ -129,7 +129,7 @@ void __init paging_init(void)
/* /*
* pg_table is physical at this point * pg_table is physical at this point
*/ */
pg_table = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); pg_table = (pte_t *) alloc_bootmem_pages(PAGE_SIZE);
pg_dir->pgd0 = (_PAGE_TABLE | __pa(pg_table)); pg_dir->pgd0 = (_PAGE_TABLE | __pa(pg_table));
pg_dir->pgd1 = (_PAGE_TABLE | (__pa(pg_table)+1024)); pg_dir->pgd1 = (_PAGE_TABLE | (__pa(pg_table)+1024));
...@@ -219,7 +219,7 @@ void __init paging_init(void) ...@@ -219,7 +219,7 @@ void __init paging_init(void)
continue; continue;
} }
pm_dir = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE*4); pm_dir = (pmd_t *) alloc_bootmem_pages(PAGE_SIZE * 4);
pgd_populate(&init_mm, pg_dir, pm_dir); pgd_populate(&init_mm, pg_dir, pm_dir);
for (j = 0 ; j < PTRS_PER_PMD ; j++,pm_dir++) { for (j = 0 ; j < PTRS_PER_PMD ; j++,pm_dir++) {
...@@ -228,7 +228,7 @@ void __init paging_init(void) ...@@ -228,7 +228,7 @@ void __init paging_init(void)
continue; continue;
} }
pt_dir = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); pt_dir = (pte_t *) alloc_bootmem_pages(PAGE_SIZE);
pmd_populate_kernel(&init_mm, pm_dir, pt_dir); pmd_populate_kernel(&init_mm, pm_dir, pt_dir);
for (k = 0 ; k < PTRS_PER_PTE ; k++,pt_dir++) { for (k = 0 ; k < PTRS_PER_PTE ; k++,pt_dir++) {
......
...@@ -1730,8 +1730,8 @@ dasd_flush_request_queue(struct dasd_device * device) ...@@ -1730,8 +1730,8 @@ dasd_flush_request_queue(struct dasd_device * device)
req = elv_next_request(device->request_queue); req = elv_next_request(device->request_queue);
if (req == NULL) if (req == NULL)
break; break;
dasd_end_request(req, 0);
blkdev_dequeue_request(req); blkdev_dequeue_request(req);
dasd_end_request(req, 0);
} }
spin_unlock_irq(&device->request_queue_lock); spin_unlock_irq(&device->request_queue_lock);
} }
......
...@@ -48,18 +48,20 @@ struct dasd_devmap { ...@@ -48,18 +48,20 @@ struct dasd_devmap {
}; };
/* /*
* dasd_servermap is used to store the server_id of all storage servers * dasd_server_ssid_map contains a globally unique storage server subsystem ID.
* accessed by DASD device driver. * dasd_server_ssid_list contains the list of all subsystem IDs accessed by
* the DASD device driver.
*/ */
struct dasd_servermap { struct dasd_server_ssid_map {
struct list_head list; struct list_head list;
struct server_id { struct server_id {
char vendor[4]; char vendor[4];
char serial[15]; char serial[15];
} sid; } sid;
__u16 ssid;
}; };
static struct list_head dasd_serverlist; static struct list_head dasd_server_ssid_list;
/* /*
* Parameter parsing functions for dasd= parameter. The syntax is: * Parameter parsing functions for dasd= parameter. The syntax is:
...@@ -89,7 +91,7 @@ static char *dasd[256]; ...@@ -89,7 +91,7 @@ static char *dasd[256];
module_param_array(dasd, charp, NULL, 0); module_param_array(dasd, charp, NULL, 0);
/* /*
* Single spinlock to protect devmap structures and lists. * Single spinlock to protect devmap and servermap structures and lists.
*/ */
static DEFINE_SPINLOCK(dasd_devmap_lock); static DEFINE_SPINLOCK(dasd_devmap_lock);
...@@ -264,8 +266,9 @@ dasd_parse_keyword( char *parsestring ) { ...@@ -264,8 +266,9 @@ dasd_parse_keyword( char *parsestring ) {
if (dasd_page_cache) if (dasd_page_cache)
return residual_str; return residual_str;
dasd_page_cache = dasd_page_cache =
kmem_cache_create("dasd_page_cache", PAGE_SIZE, 0, kmem_cache_create("dasd_page_cache", PAGE_SIZE,
SLAB_CACHE_DMA, NULL, NULL ); PAGE_SIZE, SLAB_CACHE_DMA,
NULL, NULL );
if (!dasd_page_cache) if (!dasd_page_cache)
MESSAGE(KERN_WARNING, "%s", "Failed to create slab, " MESSAGE(KERN_WARNING, "%s", "Failed to create slab, "
"fixed buffer mode disabled."); "fixed buffer mode disabled.");
...@@ -858,39 +861,6 @@ static struct attribute_group dasd_attr_group = { ...@@ -858,39 +861,6 @@ static struct attribute_group dasd_attr_group = {
.attrs = dasd_attrs, .attrs = dasd_attrs,
}; };
/*
* Check if the related storage server is already contained in the
* dasd_serverlist. If server is not contained, create new entry.
* Return 0 if server was already in serverlist,
* 1 if the server was added successfully
* <0 in case of error.
*/
static int
dasd_add_server(struct dasd_uid *uid)
{
struct dasd_servermap *new, *tmp;
/* check if server is already contained */
list_for_each_entry(tmp, &dasd_serverlist, list)
// normale cmp?
if (strncmp(tmp->sid.vendor, uid->vendor,
sizeof(tmp->sid.vendor)) == 0
&& strncmp(tmp->sid.serial, uid->serial,
sizeof(tmp->sid.serial)) == 0)
return 0;
new = (struct dasd_servermap *)
kzalloc(sizeof(struct dasd_servermap), GFP_KERNEL);
if (!new)
return -ENOMEM;
strncpy(new->sid.vendor, uid->vendor, sizeof(new->sid.vendor));
strncpy(new->sid.serial, uid->serial, sizeof(new->sid.serial));
list_add(&new->list, &dasd_serverlist);
return 1;
}
/* /*
* Return copy of the device unique identifier. * Return copy of the device unique identifier.
*/ */
...@@ -910,6 +880,9 @@ dasd_get_uid(struct ccw_device *cdev, struct dasd_uid *uid) ...@@ -910,6 +880,9 @@ dasd_get_uid(struct ccw_device *cdev, struct dasd_uid *uid)
/* /*
* Register the given device unique identifier into devmap struct. * Register the given device unique identifier into devmap struct.
* In addition check if the related storage server subsystem ID is already
* contained in the dasd_server_ssid_list. If subsystem ID is not contained,
* create new entry.
* Return 0 if server was already in serverlist, * Return 0 if server was already in serverlist,
* 1 if the server was added successful * 1 if the server was added successful
* <0 in case of error. * <0 in case of error.
...@@ -918,16 +891,39 @@ int ...@@ -918,16 +891,39 @@ int
dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid) dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid)
{ {
struct dasd_devmap *devmap; struct dasd_devmap *devmap;
int rc; struct dasd_server_ssid_map *srv, *tmp;
devmap = dasd_find_busid(cdev->dev.bus_id); devmap = dasd_find_busid(cdev->dev.bus_id);
if (IS_ERR(devmap)) if (IS_ERR(devmap))
return PTR_ERR(devmap); return PTR_ERR(devmap);
/* generate entry for server_ssid_map */
srv = (struct dasd_server_ssid_map *)
kzalloc(sizeof(struct dasd_server_ssid_map), GFP_KERNEL);
if (!srv)
return -ENOMEM;
strncpy(srv->sid.vendor, uid->vendor, sizeof(srv->sid.vendor) - 1);
strncpy(srv->sid.serial, uid->serial, sizeof(srv->sid.serial) - 1);
srv->ssid = uid->ssid;
/* server is already contained ? */
spin_lock(&dasd_devmap_lock); spin_lock(&dasd_devmap_lock);
devmap->uid = *uid; devmap->uid = *uid;
rc = dasd_add_server(uid); list_for_each_entry(tmp, &dasd_server_ssid_list, list) {
if (!memcmp(&srv->sid, &tmp->sid,
sizeof(struct dasd_server_ssid_map))) {
kfree(srv);
srv = NULL;
break;
}
}
/* add servermap to serverlist */
if (srv)
list_add(&srv->list, &dasd_server_ssid_list);
spin_unlock(&dasd_devmap_lock); spin_unlock(&dasd_devmap_lock);
return rc;
return (srv ? 1 : 0);
} }
EXPORT_SYMBOL_GPL(dasd_set_uid); EXPORT_SYMBOL_GPL(dasd_set_uid);
...@@ -995,7 +991,7 @@ dasd_devmap_init(void) ...@@ -995,7 +991,7 @@ dasd_devmap_init(void)
INIT_LIST_HEAD(&dasd_hashlists[i]); INIT_LIST_HEAD(&dasd_hashlists[i]);
/* Initialize servermap structure. */ /* Initialize servermap structure. */
INIT_LIST_HEAD(&dasd_serverlist); INIT_LIST_HEAD(&dasd_server_ssid_list);
return 0; return 0;
} }
......
...@@ -468,10 +468,10 @@ dasd_eckd_generate_uid(struct dasd_device *device, struct dasd_uid *uid) ...@@ -468,10 +468,10 @@ dasd_eckd_generate_uid(struct dasd_device *device, struct dasd_uid *uid)
return -ENODEV; return -ENODEV;
memset(uid, 0, sizeof(struct dasd_uid)); memset(uid, 0, sizeof(struct dasd_uid));
strncpy(uid->vendor, confdata->ned1.HDA_manufacturer, memcpy(uid->vendor, confdata->ned1.HDA_manufacturer,
sizeof(uid->vendor) - 1); sizeof(uid->vendor) - 1);
EBCASC(uid->vendor, sizeof(uid->vendor) - 1); EBCASC(uid->vendor, sizeof(uid->vendor) - 1);
strncpy(uid->serial, confdata->ned1.HDA_location, memcpy(uid->serial, confdata->ned1.HDA_location,
sizeof(uid->serial) - 1); sizeof(uid->serial) - 1);
EBCASC(uid->serial, sizeof(uid->serial) - 1); EBCASC(uid->serial, sizeof(uid->serial) - 1);
uid->ssid = confdata->neq.subsystemID; uid->ssid = confdata->neq.subsystemID;
......
...@@ -48,15 +48,6 @@ ...@@ -48,15 +48,6 @@
#define PRINT_ERR(x...) printk(KERN_ERR XPRAM_NAME " error:" x) #define PRINT_ERR(x...) printk(KERN_ERR XPRAM_NAME " error:" x)
static struct sysdev_class xpram_sysclass = {
set_kset_name("xpram"),
};
static struct sys_device xpram_sys_device = {
.id = 0,
.cls = &xpram_sysclass,
};
typedef struct { typedef struct {
unsigned int size; /* size of xpram segment in pages */ unsigned int size; /* size of xpram segment in pages */
unsigned int offset; /* start page of xpram segment */ unsigned int offset; /* start page of xpram segment */
...@@ -451,8 +442,6 @@ static void __exit xpram_exit(void) ...@@ -451,8 +442,6 @@ static void __exit xpram_exit(void)
} }
unregister_blkdev(XPRAM_MAJOR, XPRAM_NAME); unregister_blkdev(XPRAM_MAJOR, XPRAM_NAME);
blk_cleanup_queue(xpram_queue); blk_cleanup_queue(xpram_queue);
sysdev_unregister(&xpram_sys_device);
sysdev_class_unregister(&xpram_sysclass);
} }
static int __init xpram_init(void) static int __init xpram_init(void)
...@@ -470,19 +459,7 @@ static int __init xpram_init(void) ...@@ -470,19 +459,7 @@ static int __init xpram_init(void)
rc = xpram_setup_sizes(xpram_pages); rc = xpram_setup_sizes(xpram_pages);
if (rc) if (rc)
return rc; return rc;
rc = sysdev_class_register(&xpram_sysclass); return xpram_setup_blkdev();
if (rc)
return rc;
rc = sysdev_register(&xpram_sys_device);
if (rc) {
sysdev_class_unregister(&xpram_sysclass);
return rc;
}
rc = xpram_setup_blkdev();
if (rc)
sysdev_unregister(&xpram_sys_device);
return rc;
} }
module_init(xpram_init); module_init(xpram_init);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment