params->resp_avail = resp_avail;
        params->v = v;
        INIT_LIST_HEAD(¶ms->resp_queue);
+       spin_lock_init(¶ms->resp_lock);
        pr_debug("%s: configNr = %d\n", __func__, i);
 
        return params;
 {
        rndis_resp_t *r, *n;
 
+       spin_lock(¶ms->resp_lock);
        list_for_each_entry_safe(r, n, ¶ms->resp_queue, list) {
                if (r->buf == buf) {
                        list_del(&r->list);
                        kfree(r);
                }
        }
+       spin_unlock(¶ms->resp_lock);
 }
 EXPORT_SYMBOL_GPL(rndis_free_response);
 
 
        if (!length) return NULL;
 
+       spin_lock(¶ms->resp_lock);
        list_for_each_entry_safe(r, n, ¶ms->resp_queue, list) {
                if (!r->send) {
                        r->send = 1;
                        *length = r->length;
+                       spin_unlock(¶ms->resp_lock);
                        return r->buf;
                }
        }
 
+       spin_unlock(¶ms->resp_lock);
        return NULL;
 }
 EXPORT_SYMBOL_GPL(rndis_get_next_response);
        r->length = length;
        r->send = 0;
 
+       spin_lock(¶ms->resp_lock);
        list_add_tail(&r->list, ¶ms->resp_queue);
+       spin_unlock(¶ms->resp_lock);
        return r;
 }