Re: mutual exclusion locks over PCI memory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Sun, Feb 22, 2009 at 8:25 AM, Grant Grundler
<grundler@xxxxxxxxxxxxxxxx> wrote:
> On Fri, Feb 20, 2009 at 07:10:24AM -0700, Matthew Wilcox wrote:
>> On Fri, Feb 20, 2009 at 07:09:51PM +0530, arun c wrote:
>> > PCI host machine (PPC cpu) writes commands to
>> > the PCI memory space of the (Coldfire CPU)
>> > target device. Target device takes the command
>> > and executes it.
>> >
>> > Target devices SDRAM is exposed over PCI to host.
>> > A circular buffer residing on target memory is used
>> > for command exchange.
>> >
>> > I should not allow host and target to play on the
>> > buffer simultaneously in order to avoid corruption.
>> >
>> > Does anybody know how to implement a lock
>> > suitable for this issue?
>> >
>> > or any lock less algorithm exists for communication
>> > over PCI?
>>
>> I would have thought that a standard head and tail lockless queue would
>> be perfect for your application.  Expressed in C:

Yes I don't need any lock to protect my data
here, as host is write only and target is read only.

Here is what I did.

typedef command_pkt {
u32 valid;
......
......
......
u32 data[];
}

typedef struct my_circ_buf {
u32 read_index;
u32 write_index;
command_pkt_t cmd_pkt[30];
} my_circ_buf_t;

Host writes commands,makes valid
field to VALID,and increments write_index.

Target reads commands at read_index,
if and only if valid field is VALID and
after processing it makes valid field
INVALID and increments read_index.

It seems to be working for me
I need to investigate further for any
cache coherency issues, write now
I am running with dcache off.

Regards,
Arun C
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux