*    Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
  */
 
-#include <linux/slab.h>
+#include <linux/vmalloc.h>
 #include <linux/bitops.h>
 #include "idset.h"
 #include "css.h"
 {
        struct idset *set;
 
-       set = kzalloc(sizeof(struct idset) + bitmap_size(num_ssid, num_id),
-                     GFP_KERNEL);
+       set = vmalloc(sizeof(struct idset) + bitmap_size(num_ssid, num_id));
        if (set) {
                set->num_ssid = num_ssid;
                set->num_id = num_id;
+               memset(set->bitmap, 0, bitmap_size(num_ssid, num_id));
        }
        return set;
 }
 
 void idset_free(struct idset *set)
 {
-       kfree(set);
+       vfree(set);
 }
 
 void idset_clear(struct idset *set)