TRACE_M("on_receive_block - kmalloc %x",(int)pBlock); 
TRACE_M("on_receive_block - kmalloc %p",pBlock); 
static void on_receive_block(struct r3964_info *pInfo){   unsigned int length;   struct r3964_client_info *pClient;   struct r3964_block_header *pBlock;      length=pInfo->rx_position;   /* compare byte checksum characters: */   if(pInfo->flags & R3964_BCC)   {      if(pInfo->bcc!=pInfo->last_rx)      {         TRACE_PE("checksum error - got %x but expected %x",                pInfo->last_rx, pInfo->bcc);         pInfo->flags |= R3964_CHECKSUM;      }   }   /* check for errors (parity, overrun,...): */   if(pInfo->flags & R3964_ERROR)   {      TRACE_PE("on_receive_block - transmission failed error %x",             pInfo->flags & R3964_ERROR);            put_char(pInfo, NAK);      flush(pInfo);      if(pInfo->nRetry<R3964_MAX_RETRIES)      {         pInfo->state=R3964_WAIT_FOR_RX_REPEAT;         pInfo->nRetry++;	 mod_timer(&pInfo->tmr, jiffies + R3964_TO_RX_PANIC);      }      else      {         TRACE_PE("on_receive_block - failed after max retries");         pInfo->state=R3964_IDLE;      }      return;   }      /* received block; submit DLE: */   put_char(pInfo, DLE);   flush(pInfo);   del_timer_sync(&pInfo->tmr);   TRACE_PS(" rx success: got %d chars", length);   /* prepare struct r3964_block_header: */   pBlock = kmalloc(length+sizeof(struct r3964_block_header), GFP_KERNEL);   TRACE_M("on_receive_block - kmalloc %x",(int)pBlock);   if(pBlock==NULL)      return;   pBlock->length = length;   pBlock->data   = ((unsigned char*)pBlock)+sizeof(struct r3964_block_header);   pBlock->locks  = 0;   pBlock->next   = NULL;   pBlock->owner  = NULL;   memcpy(pBlock->data, pInfo->rx_buf, length);   /* queue block into rx_queue: */   add_rx_queue(pInfo, pBlock);   /* notify attached client processes: */   for(pClient=pInfo->firstClient; pClient; pClient=pClient->next)   {      if(pClient->sig_flags & R3964_SIG_DATA)      {         add_msg(pClient, R3964_MSG_DATA, length, R3964_OK, pBlock);      }   }   wake_up_interruptible (&pInfo->read_wait);      pInfo->state = R3964_IDLE;   trigger_transmit(pInfo);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/87e0f3dbd3693bc4583474ab191cbdd5e3d9d0fa/n_r3964.c/clean/drivers/char/n_r3964.c