如何保留 kmalloc 分配的内存,即使它被其他函数释放了

问题描述 投票:0回答:1

我遇到一种情况,由

kmalloc
分配的内存不应该被释放,即使 Linux 内核的其他部分在其上调用
kfree
也是如此。以下是场景:

  1. 我的驱动程序使用
    kmalloc()
    分配内存并使用该缓冲区创建
    skb
  2. 驱动程序将此 skb 传递到网络堆栈。
  3. 网络堆栈处理数据包并在驱动程序分配的缓冲区上调用free。
  4. 但是驱动程序希望为即将到来的数据包重用相同的缓冲区。

有什么办法可以实现这一点吗?我知道我们可以通过使用页数来使用页面,但我不能使用页面。我必须使用 kmalloc。

c linux linux-kernel network-programming linux-device-driver
1个回答
0
投票
#ifndef mem_map_reserve
#define mem_map_reserve(p)      set_bit(PG_reserved, &((p)->flags))
#endif

struct page *page;
    
    page = virt_to_page(addr + size - 1);
    mem_map_reserve(page);
© www.soinside.com 2019 - 2024. All rights reserved.