void aa_free_proxy_kref(struct kref *kref);
-struct aa_profile *aa_alloc_profile(const char *name);
+struct aa_profile *aa_alloc_profile(const char *name, gfp_t gfp);
 struct aa_profile *aa_new_null_profile(struct aa_profile *parent, int hat);
 void aa_free_profile(struct aa_profile *profile);
 void aa_free_profile_kref(struct kref *kref);
 
 /**
  * aa_alloc_profile - allocate, initialize and return a new profile
  * @hname: name of the profile  (NOT NULL)
+ * @gfp: allocation type
  *
  * Returns: refcount profile or NULL on failure
  */
-struct aa_profile *aa_alloc_profile(const char *hname)
+struct aa_profile *aa_alloc_profile(const char *hname, gfp_t gfp)
 {
        struct aa_profile *profile;
 
        /* freed by free_profile - usually through aa_put_profile */
-       profile = kzalloc(sizeof(*profile), GFP_KERNEL);
+       profile = kzalloc(sizeof(*profile), gfp);
        if (!profile)
                return NULL;
 
-       profile->proxy = kzalloc(sizeof(struct aa_proxy), GFP_KERNEL);
+       profile->proxy = kzalloc(sizeof(struct aa_proxy), gfp);
        if (!profile->proxy)
                goto fail;
        kref_init(&profile->proxy->count);
 
-       if (!aa_policy_init(&profile->base, NULL, hname, GFP_KERNEL))
+       if (!aa_policy_init(&profile->base, NULL, hname, gfp))
                goto fail;
        kref_init(&profile->count);
 
                goto fail;
        sprintf(name, "%s//null-%x", parent->base.hname, uniq);
 
-       profile = aa_alloc_profile(name);
+       profile = aa_alloc_profile(name, GFP_KERNEL);
        kfree(name);
        if (!profile)
                goto fail;