static LIST_HEAD(capiminor_list);
#endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
-static kmem_cache_t *capidev_cachep;
-static kmem_cache_t *capincci_cachep;
-#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
-static kmem_cache_t *capiminor_cachep;
-static kmem_cache_t *capidh_cachep;
-#endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
-
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
/* -------- datahandles --------------------------------------------- */
{
struct datahandle_queue *n, **pp;
- n = (struct datahandle_queue *)
- kmem_cache_alloc(capidh_cachep, GFP_ATOMIC);
+ n = kmalloc(sizeof(*n), GFP_ATOMIC);
if (!n) {
printk(KERN_ERR "capi: alloc datahandle failed\n");
return -1;
if ((*pp)->datahandle == datahandle) {
p = *pp;
*pp = (*pp)->next;
- kmem_cache_free(capidh_cachep, p);
+ kfree(p);
mp->nack--;
return 0;
}
while (*pp) {
p = *pp;
*pp = (*pp)->next;
- kmem_cache_free(capidh_cachep, p);
+ kfree(p);
mp->nack--;
}
}
unsigned long flags;
MOD_INC_USE_COUNT;
- mp = kmem_cache_alloc(capiminor_cachep, GFP_ATOMIC);
+ mp = kmalloc(sizeof(*mp), GFP_ATOMIC);
if (!mp) {
MOD_DEC_USE_COUNT;
printk(KERN_ERR "capi: can't alloc capiminor\n");
skb_queue_purge(&mp->inqueue);
skb_queue_purge(&mp->outqueue);
capiminor_del_all_ack(mp);
- kmem_cache_free(capiminor_cachep, mp);
+ kfree(mp);
MOD_DEC_USE_COUNT;
#ifdef _DEBUG_REFCOUNT
printk(KERN_DEBUG "capiminor_free %d\n", GET_USE_COUNT(THIS_MODULE));
kdev_t kdev;
#endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
- np = (struct capincci *)kmem_cache_alloc(capincci_cachep, GFP_ATOMIC);
+ np = kmalloc(sizeof(*np), GFP_ATOMIC);
if (!np)
return 0;
memset(np, 0, sizeof(struct capincci));
}
}
#endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
- kmem_cache_free(capincci_cachep, np);
+ kfree(np);
if (*pp == 0) return;
} else {
pp = &(*pp)->next;
struct capidev *cdev;
unsigned long flags;
- cdev = kmem_cache_alloc(capidev_cachep, GFP_KERNEL);
+ cdev = kmalloc(sizeof(*cdev), GFP_KERNEL);
if (!cdev)
return 0;
memset(cdev, 0, sizeof(struct capidev));
write_lock_irqsave(&capidev_list_lock, flags);
list_del(&cdev->list);
write_unlock_irqrestore(&capidev_list_lock, flags);
- kmem_cache_free(capidev_cachep, cdev);
+ kfree(cdev);
}
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
/* -------- init function and module interface ---------------------- */
-static void alloc_exit(void)
-{
- if (capidev_cachep) {
- (void)kmem_cache_destroy(capidev_cachep);
- capidev_cachep = 0;
- }
- if (capincci_cachep) {
- (void)kmem_cache_destroy(capincci_cachep);
- capincci_cachep = 0;
- }
-#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
- if (capidh_cachep) {
- (void)kmem_cache_destroy(capidh_cachep);
- capidh_cachep = 0;
- }
- if (capiminor_cachep) {
- (void)kmem_cache_destroy(capiminor_cachep);
- capiminor_cachep = 0;
- }
-#endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
-}
-
-static int __init alloc_init(void)
-{
- capidev_cachep = kmem_cache_create("capi20_dev",
- sizeof(struct capidev),
- 0,
- SLAB_HWCACHE_ALIGN,
- NULL, NULL);
- if (!capidev_cachep) {
- alloc_exit();
- return -ENOMEM;
- }
-
- capincci_cachep = kmem_cache_create("capi20_ncci",
- sizeof(struct capincci),
- 0,
- SLAB_HWCACHE_ALIGN,
- NULL, NULL);
- if (!capincci_cachep) {
- alloc_exit();
- return -ENOMEM;
- }
-#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
- capidh_cachep = kmem_cache_create("capi20_dh",
- sizeof(struct datahandle_queue),
- 0,
- SLAB_HWCACHE_ALIGN,
- NULL, NULL);
- if (!capidh_cachep) {
- alloc_exit();
- return -ENOMEM;
- }
- capiminor_cachep = kmem_cache_create("capi20_minor",
- sizeof(struct capiminor),
- 0,
- SLAB_HWCACHE_ALIGN,
- NULL, NULL);
- if (!capiminor_cachep) {
- alloc_exit();
- return -ENOMEM;
- }
-#endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
- return 0;
-}
-
static char rev[32];
static int __init capi_init(void)
}
#endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
- if (alloc_init() < 0) {
-#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
- capinc_tty_exit();
-#endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
- devfs_unregister_chrdev(capi_major, "capi20");
- devfs_unregister(devfs_find_handle(NULL, "capi20",
- capi_major, 0,
- DEVFS_SPECIAL_CHR, 0));
- MOD_DEC_USE_COUNT;
- return -ENOMEM;
- }
-
- (void)proc_init();
+ proc_init();
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
#if defined(CONFIG_ISDN_CAPI_CAPIFS) || defined(CONFIG_ISDN_CAPI_CAPIFS_MODULE)
static void __exit capi_exit(void)
{
- alloc_exit();
- (void)proc_exit();
+ proc_exit();
devfs_unregister_chrdev(capi_major, "capi20");
devfs_unregister(devfs_find_handle(NULL, "isdn/capi20", capi_major, 0, DEVFS_SPECIAL_CHR, 0));