Mark dma buffer readonly

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

 



Hi,

This is regarding dma memory usage  in my kernel driver on arm64 processor.

I have a structure in my kernel driver as shown below-

        struct dummy_dc_dmabuf {
        struct dma_buf *buf;
        struct dma_buf_attachment *attach;
        struct sg_table *sgt;
         };

For this I am able to get memory allocated like below

void pin_window(struct dummy_dmabuf **dum_buf, int fd, struct device *dev)
{
        struct dummy_dmabuf *dum_dmabuf;
        dma_addr_t dma_addr;


        dum_dmabuf = kzalloc(sizeof(*dum_dmabuf), GFP_KERNEL);
        if (!dum_dmabuf)
                return -ENOMEM;

        dum_dmabuf->buf = dma_buf_get(fd);
        dum_dmabuf->attach = dma_buf_attach(dum_dmabuf->buf, dev->parent);
        dum_dmabuf->sgt = dma_buf_map_attachment(dum_dmabuf->attach,
DMA_TO_DEVICE);

        *dum_buf = dum_dmabuf;
}


As per ldd3 , Chapter 15 - "The DMA controller is a shared resource,
and confusion could arise if more than one
processor attempts to program it simultaneously. For that reason, the
controller is protected by a spinlock, called dma_spin_lock. Drivers
should not manipulate the
lock directly;"

However, I am using this in kthreads and I want to protect it without
using mutex/spilock.
Apart from protecting it with spinlock or mutex, is their anyway to
mark this dma buffer as read-only so that other threads(after
concerned thread has accessed it) cannot access the dma buffer.

Regards,
Saket Sinha

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]

  Powered by Linux