OK Patch To Fix:

--- old_kernel/drivers/scsi/arcmsr/arcmsr_hba.c       2008-06-07 
23:45:53.000000000 +0200
+++ arcmsr_hba.c        2008-06-07 23:36:49.000000000 +0200
@@ -1380,18 +1380,16 @@
        switch(controlcode) {

        case ARCMSR_MESSAGE_READ_RQBUFFER: {
-               unsigned long *ver_addr;
+               unsigned char *ver_addr;
                uint8_t *pQbuffer, *ptmpQbuffer;
                int32_t allxfer_len = 0;
-               void *tmp;

-               tmp = kmalloc(1032, GFP_KERNEL|GFP_DMA);
-               ver_addr = (unsigned long *)tmp;
-               if (!tmp) {
+               ver_addr = kmalloc(1032, GFP_ATOMIC);
+               if (!ver_addr) {
                        retvalue = ARCMSR_MESSAGE_FAIL;
                        goto message_out;
                }
-               ptmpQbuffer = (uint8_t *) ver_addr;
+               ptmpQbuffer = ver_addr;
                while ((acb->rqbuf_firstindex != acb->rqbuf_lastindex)
                        && (allxfer_len < 1031)) {
                        pQbuffer = &acb->rqbuffer[acb->rqbuf_firstindex];
@@ -1420,26 +1418,24 @@
                        }
                        arcmsr_iop_message_read(acb);
                }
-               memcpy(pcmdmessagefld->messagedatabuffer, (uint8_t *)ver_addr, 
allxfer_len);
+               memcpy(pcmdmessagefld->messagedatabuffer, ver_addr, 
allxfer_len);
                pcmdmessagefld->cmdmessage.Length = allxfer_len;
                pcmdmessagefld->cmdmessage.ReturnCode = 
ARCMSR_MESSAGE_RETURNCODE_OK;
-               kfree(tmp);
+               kfree(ver_addr);
                }
                break;

        case ARCMSR_MESSAGE_WRITE_WQBUFFER: {
-               unsigned long *ver_addr;
+               unsigned char *ver_addr;
                int32_t my_empty_len, user_len, wqbuf_firstindex, 
wqbuf_lastindex;
                uint8_t *pQbuffer, *ptmpuserbuffer;
-               void *tmp;

-               tmp = kmalloc(1032, GFP_KERNEL|GFP_DMA);
-               ver_addr = (unsigned long *)tmp;
-               if (!tmp) {
+               ver_addr = kmalloc(1032, GFP_ATOMIC);
+               if (!ver_addr) {
                        retvalue = ARCMSR_MESSAGE_FAIL;
                        goto message_out;
                }
-               ptmpuserbuffer = (uint8_t *)ver_addr;
+               ptmpuserbuffer = ver_addr;
                user_len = pcmdmessagefld->cmdmessage.Length;
                memcpy(ptmpuserbuffer, pcmdmessagefld->messagedatabuffer, 
user_len);
                wqbuf_lastindex = acb->wqbuf_lastindex;
@@ -1485,7 +1481,7 @@
                                retvalue = ARCMSR_MESSAGE_FAIL;
                        }
                        }
-                       kfree(tmp);
+                       kfree(ver_addr);
                }
                break;


** Changed in: linux (Ubuntu)
     Assignee: (unassigned) => Dupond Jean-Louis (info-dupondje)
       Status: Confirmed => Fix Committed

-- 
BUG: scheduling while atomic: archhttp64/7146/0x1000000001
https://bugs.launchpad.net/bugs/235889
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to