On Wed, 2011-08-24 at 20:23 +0200, Marc Dietrich wrote:
> This is a rather large patch. The older code wasn't stable enough
> in all cases as it confused the EC during high system load. The new
> code uses a better state machine which is quiet similar to the
> original code from NVIDIA.
[]
> diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c
[]
> @@ -91,29 +91,73 @@ static int nvec_status_notifier(struct notifier_block *nb,
>  void nvec_write_async(struct nvec_chip *nvec, const unsigned char *data,
>                       short size)
>  {
> -     struct nvec_msg *msg = kzalloc(sizeof(struct nvec_msg), GFP_NOWAIT);
> +     struct nvec_msg *msg;
> +     unsigned long flags;
>  
> -     msg->data = kzalloc(size, GFP_NOWAIT);
> +     msg = kzalloc(sizeof(struct nvec_msg), GFP_ATOMIC);
>       msg->data[0] = size;
>       memcpy(msg->data + 1, data, size);
>       msg->size = size + 1;
> -     msg->pos = 0;
> -     INIT_LIST_HEAD(&msg->node);
>  
> +     spin_lock_irqsave(&nvec->tx_lock, flags);
>       list_add_tail(&msg->node, &nvec->tx_data);
> +     spin_unlock_irqrestore(&nvec->tx_lock, flags);

> diff --git a/drivers/staging/nvec/nvec.h b/drivers/staging/nvec/nvec.h
[]
>  struct nvec_msg {
> -     unsigned char *data;
> +     struct list_head node;
> +     unsigned char data[MAX_PKT_SIZE];
>       unsigned short size;
>       unsigned short pos;
> -     struct list_head node;
> +     unsigned short used;
>  };

Looks like this kzalloc should be kmalloc
and the other fields should be initialized
instead.

It might be better to have a preallocated
ring of nvec_msg buffers so there isn't
a need to use GFP_ATOMIC.


_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to