Thanks James.  I'll give a try tonight or tomorrow.

-J

--
On Sat, Feb 16, 2008 at 11:37:41PM +0000, Daniel Drake wrote:
> Daniel Drake wrote:
>> Here is a patch to address your comments.
>> Joshua, would you mind testing this before I submit it properly? It will 
>> apply cleanly to 2.6.24 on top of the previous patch you tested. I have 
>> compile-tested it.
>
> It would help to include the patch.

> >From 0a9cd6133fe4f0c3a8906d6be1b9d1ef083345dc Mon Sep 17 00:00:00 2001
> From: Daniel Drake <[EMAIL PROTECTED]>
> Date: Sat, 16 Feb 2008 23:25:02 +0000
> Subject: [PATCH] arcmsr: fix message allocation
> 
> ---
>  drivers/scsi/arcmsr/arcmsr_hba.c |   26 +++++++++++---------------
>  1 files changed, 11 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c 
> b/drivers/scsi/arcmsr/arcmsr_hba.c
> index 4f9ff32..f91f79c 100644
> --- a/drivers/scsi/arcmsr/arcmsr_hba.c
> +++ b/drivers/scsi/arcmsr/arcmsr_hba.c
> @@ -1387,18 +1387,16 @@ static int arcmsr_iop_message_xfer(struct 
> AdapterControlBlock *acb, \
>       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];
> @@ -1427,26 +1425,24 @@ static int arcmsr_iop_message_xfer(struct 
> AdapterControlBlock *acb, \
>                       }
>                       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;
> @@ -1492,7 +1488,7 @@ static int arcmsr_iop_message_xfer(struct 
> AdapterControlBlock *acb, \
>                               retvalue = ARCMSR_MESSAGE_FAIL;
>                       }
>                       }
> -                     kfree(tmp);
> +                     kfree(ver_addr);
>               }
>               break;
>  
> -- 
> 1.5.4
> 

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to