On 4/25/24 06:41, Alexandra Diupina wrote:
+static MemTxResult xlnx_dpdma_read_descriptor(XlnxDPDMAState *s, + uint64_t desc_addr, DPDMADescriptor *desc) +{ + if (dma_memory_read(&address_space_memory, desc_addr, &desc, + sizeof(DPDMADescriptor), MEMTXATTRS_UNSPECIFIED)) + return MEMTX_ERROR; +
Missing { } for docs/devel/style.rst.
+static void xlnx_dpdma_write_descriptor(uint64_t desc_addr, + DPDMADescriptor *desc) +{ + /* Convert from host endianness into LE. */ + desc->control = cpu_to_le32(desc->control); + desc->descriptor_id = cpu_to_le32(desc->descriptor_id); + desc->xfer_size = cpu_to_le32(desc->xfer_size); + desc->line_size_stride = cpu_to_le32(desc->line_size_stride); + desc->timestamp_lsb = cpu_to_le32(desc->timestamp_lsb); + desc->timestamp_msb = cpu_to_le32(desc->timestamp_msb); + desc->address_extension = cpu_to_le32(desc->address_extension); + desc->next_descriptor = cpu_to_le32(desc->next_descriptor); + desc->source_address = cpu_to_le32(desc->source_address); + desc->address_extension_23 = cpu_to_le32(desc->address_extension_23); + desc->address_extension_45 = cpu_to_le32(desc->address_extension_45); + desc->source_address2 = cpu_to_le32(desc->source_address2); + desc->source_address3 = cpu_to_le32(desc->source_address3); + desc->source_address4 = cpu_to_le32(desc->source_address4); + desc->source_address5 = cpu_to_le32(desc->source_address5); + desc->crc = cpu_to_le32(desc->crc);
This is incorrect, rewriting in place, because after the call,
if (xlnx_dpdma_desc_completion_interrupt(&desc)) {
the memory block is still live, and the swap here has corrupted it.
+ + dma_memory_write(&address_space_memory, desc_addr, &desc,
This is incorrect because desc is now a pointer so &desc is DPDMADescriptor **. Do not reply to an existing thread to post a new patch. r~