Kindly help me to solve the following issue in code for Linux USB Host Controller Driver.
The code compiles ok.
But when the spin_lock_irq gets executed, an error comes whose debug print is shown below.

--------------------------------------------------------------------------
BUG: sleeping function called from invalid context at mm/slab.c:3032
in_atomic():0, irqs_disabled():1
[<c046df38>] kmem_cache_alloc+0x1b/0x56
[<d0826a9a>] Check_Intrupter_Queue+0x60/0x1e3 [xHCI_lts]
[<d0828177>] xhci_urb_enqueue+0xf5/0x215 [xHCI_lts]
[<d084a0f8>] usb_hcd_submit_urb+0x7fb/0x8a3 [usbcore]
[<d082828d>] xhci_urb_enqueue+0x20b/0x215 [xHCI_lts]
[<c04dc7b4>] vsnprintf+0x450/0x48c
[<c042713b>] release_console_sem+0x17e/0x197
[<d084a9c6>] usb_start_wait_urb+0x3a/0x119 [usbcore]
[<c0533921>] vt_console_print+0x0/0x228
[<c0426e63>] __call_console_drivers+0x4f/0x5b
[<d084ac96>] usb_control_msg+0xb5/0xcf [usbcore]
[<d084b633>] usb_get_descriptor+0x86/0xae [usbcore]
[<d084be4f>] usb_get_device_descriptor+0x49/0x7c [usbcore]
[<d0845701>] hub_port_init+0x55d/0x5ec [usbcore]
[<d0847d88>] hub_thread+0x909/0xf1b [usbcore]
[<c0437929>] autoremove_wake_function+0x0/0x35
[<d084747f>] hub_thread+0x0/0xf1b [usbcore]
[<c0437860>] kthread+0xb0/0xd8
[<c04377b0>] kthread+0x0/0xd8
[<c04059d7>] kernel_thread_helper+0x7/0x10
------------------------------------------------------------------------

Any insights would be highly appreciated

Thanks
Akshat