Hi Sylvain,

On Mon, Mar 15, 2010 at 01:49:05PM +0000, Centelles, Sylvain wrote:
> Sorry to bother you agin, but I still don't see the EINPROGRESS value being 
> checked, as it's set before the completion.
> 
> As it's stated in the definition of the spi_async in spi.h:
>  * The completion callback is invoked in a context which can't sleep.
>  * Before that invocation, the value of message->status is undefined.
>  * When the callback is issued, message->status holds either zero (to
>  * indicate complete success) or a negative error code.
> 
> The EINPROGRESS value (in the pxa driver) is set at the beginning of the 
> transfer function, prior to any completion, then, I don't understand how it 
> could be checked in the spi core, as the message->status seems always 
> checked after a wait_for_completion.
> 
> The only meaning of setting this value at this stage, would be to let 
> another caller the possibility to check the status of this message, for 
> whatever reason. But I don't see such check or call in the current spi core.
> Anyways, if this was the case, it would invalidate the comment above " 
> Before that invocation, the value of message->status is undefined."
> Nevertheless, my understanding is that it could also be needed, as you said, 
> by any caller checking the message->status after a call to spi_async, but 
> not waiting for a completion. But is it a realistic use case?

I guess that the rationale for this is to make non-blocking IO easier. You may 
send an SPI message asynchronously and then poll the status field for 
completion. This may have a performance benefit in situations where in most 
cases by the time you check the status field the SPI transfer has completed.  
This way you can avoid a context switch.

Just a guess.

baruch

> -----Original Message-----
> From: Baruch Siach [mailto:[email protected]] 
> Sent: Monday, March 15, 2010 2:18 PM
> To: Centelles, Sylvain
> Cc: [email protected]
> Subject: Re: [spi-devel-general] Purpose of the "msg->status"
> 
> Hi Sylvain,
> 
> On Mon, Mar 15, 2010 at 01:06:33PM +0000, Centelles, Sylvain wrote:
> > Thx for your fast answer.
> > I had seen this piece of code. But if this is the only purpose of the 
> > msg->status, then it means it's only used to give return status of the 
> > transfer after the completion.
> > That mean that the only possible value will be an error code or success.  
> > The EINPROGRESS (used in the pxa2xx_spi.c for example) will never have a 
> > chance to be returned at this place, as any completion will overwrite it.  
> > Right?  That what was confusing me...
> 
> No. Any caller of the spi_async() routine must check the msg->status field on 
> return.  See for example the spidev_sync() function in drivers/spi/spidev.c.  
> Snippet follows:
> 
>         spin_lock_irq(&spidev->spi_lock);
>         if (spidev->spi == NULL)
>                 status = -ESHUTDOWN;
>         else
>                 status = spi_async(spidev->spi, message);
>         spin_unlock_irq(&spidev->spi_lock);
> 
>         if (status == 0) {
>                 wait_for_completion(&done);
>                 status = message->status;
>                 if (status == 0)
>                         status = message->actual_length;
>         }
> 
> baruch
> 
> > -----Original Message-----
> > From: Baruch Siach [mailto:[email protected]] 
> > Sent: Monday, March 15, 2010 12:06 PM
> > To: Centelles, Sylvain
> > Cc: [email protected]
> > Subject: Re: [spi-devel-general] Purpose of the "msg->status"
> > 
> > Hi Sylvain,
> > 
> > On Mon, Mar 15, 2010 at 10:13:52AM +0000, Centelles, Sylvain wrote:
> > > I'm currently working on a spi driver for Intel platform, and when 
> > > reading 
> > > the various other spi drivers available in the kernel, I saw the 
> > > msg->status 
> > > was often updated (EINPROGRESS for example), but could not figure out who 
> > > checks this status. I would have thought it would be needed to prevent 
> > > concurrent access for example, but I didn't see anything in the core, 
> > > nore 
> > > in any driver. If it's not needed, then I would not like to carry some 
> > > useless status updates in the driver I'm currently working on.
> > > Maybe I missed something... So if someone can please give some info on 
> > > this, it would be great!
> > 
> > See the spi_sync() function in drivers/spi/spi.c. Following is a snippet 
> > from 
> > this function:
> > 
> >         if (status == 0) {
> >                 wait_for_completion(&done);
> >                 status = message->status;
> >         }
> >         message->context = NULL;
> >         return status;
> > 
> > baruch
> > 
> > -- 
> >                                                      ~. .~   Tk Open Systems
> > =}------------------------------------------------ooO--U--Ooo------------{=
> >    - [email protected] - tel: +972.2.679.5364, http://www.tkos.co.il -
> > ---------------------------------------------------------------------
> > Intel Corporation SAS (French simplified joint stock company)
> > Registered headquarters: "Les Montalets"- 2, rue de Paris, 
> > 92196 Meudon Cedex, France
> > Registration Number:  302 456 199 R.C.S. NANTERRE
> > Capital: 4,572,000 Euros
> > 
> > This e-mail and any attachments may contain confidential material for
> > the sole use of the intended recipient(s). Any review or distribution
> > by others is strictly prohibited. If you are not the intended
> > recipient, please contact the sender and delete all copies.
> > 
> 
> -- 
>                                                      ~. .~   Tk Open Systems
> =}------------------------------------------------ooO--U--Ooo------------{=
>    - [email protected] - tel: +972.2.679.5364, http://www.tkos.co.il -
> ---------------------------------------------------------------------
> Intel Corporation SAS (French simplified joint stock company)
> Registered headquarters: "Les Montalets"- 2, rue de Paris, 
> 92196 Meudon Cedex, France
> Registration Number:  302 456 199 R.C.S. NANTERRE
> Capital: 4,572,000 Euros
> 
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
> 

-- 
                                                     ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - [email protected] - tel: +972.2.679.5364, http://www.tkos.co.il -

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
spi-devel-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spi-devel-general

Reply via email to