Hi,
I am observing a very strange but reproducable behaviour with an embedded (Win-XP
embedded) application and Intel Atom Z5xx/US15W chipset
My system has four DMA channels, each writing continuously to a 20 MB sized
circular buffer over PCI Express.
The failures I see is that periodically 4K Bytes (1K successive DWord ring-buffer
entries) of memory contains all zeros. These 4 KByte holes are repeated with a
distance of 64 KByte. The holes are also somewhat strange, the last 16 bytes of a
page (to be more precise, of the previous 1K buffer Dword entries) are missing and
the next page contains all zeros except for the last sixteen bytes which again
contains valid data.
I have a test suite which runs for between 15 mins and maybe two hours. Once the
test is finished it rebotts the system (shutdown /r /t 20) and begins again
automatically. On my system, about 1/4 of all test runs fail, on my customers it
can be up to 1/2. This may be dependent on whether EWF is active or not. Whether
the test suite fails or not seems to depend on the session. i.e. a boot session
either has some failures or none at all. If I manually interrupt a successful
session, it will run on for days without errors. If I manually interrupt a failed
session, the same test will always fail.
One thing I noticed about the 16 byte offset at the end of a page is also the
following. When my service (which keeps the circular buffers locked down using a
pended/asynchronous request) starts up, I log the size of the first scatter/gather
page, the size of the last one and the largest size encountered on a
scatter/gather element. The first page always (well anytime I’ve looked) has a
size of 0xff0, the last a size of 0x10 and the largest scatter/gather element(s)
have a size of 0x3000. The scatter/list for each ring-buffer is stored in a buffer
(about 1200 elements) since it is too large to fit in the FPGA, which can only
hold 512 entries. The scatter/gather FIFO in the FPGA is periodically updated.
My FPGA always tries to transfer 128 bytes at a time except of course at page end etc.
The driver alignment requirement by the way has been set to 64-byte.
Has anybody seen anything similar?