Linux kernel 你好我正在尝试使用kmalloc在linux内核中分配内存

Linux kernel 你好我正在尝试使用kmalloc在linux内核中分配内存,linux-kernel,kmalloc,Linux Kernel,Kmalloc,我正在尝试使用kmalloc在Linux内核中分配内存。我的结构设计如下: struct st_fetch_point { struct sk_buff *end_pkt ; struct sk_buff *start_pkt ; struct sk_buff *current_pkt ; struct st_fetch_point *next_fortp ; struct st_fetch_point *next_consec ; }; 我创建了一个类

我正在尝试使用kmalloc在Linux内核中分配内存。我的结构设计如下:

struct st_fetch_point {
    struct sk_buff *end_pkt ;
    struct sk_buff *start_pkt ;
    struct sk_buff *current_pkt ;
    struct st_fetch_point *next_fortp ;
    struct st_fetch_point *next_consec ;
};
我创建了一个类型为st_fetch_point的新结构,并尝试以以下方式分配内存和为成员指针赋值:

struct st_fetch_point *first_fetch_point;

first_fetch_point = kmalloc((sizeof(struct st_fetch_point)), GFP_ATOMIC);

if (!first_fetch_point)
        return -ENOMEM;

skb = tcp_send_head(meta_sk);

first_fetch_point->start_pkt = skb;
first_fetch_point->current_pkt = skb;
first_fetch_point->end_pkt = NULL;
first_fetch_point->next_fortp = NULL;
first_fetch_point->next_consec = NULL;

但每次到达kmalloc()执行行时,内核似乎都在冻结。我正在使用Ubuntu14.04,真的有问题。我检查了syslog和kernlog文件,没有发现任何与冻结相关的异常消息。这是kmalloc()分配方法的问题吗

这不是kmalloc的问题。问题在于如何以及在何处使用它。你能指定吗?@AlexHoppus它看起来不像kmalloc问题。我有两种结构。我分配的一个struct st_fetch_point*first_fetch_point和另一个struct st_fetch_point*start_fetch_point。他们俩属于同一类别。分配内存后,我尝试执行以下操作:tp->mptcp->current\u fetch\u point=first\u fetch\u point;//tp->mptcp->current\u fetch\u point=NULL在这一点之前,看起来内核在这一点上冻结了。你能指出我在这一点上做错了什么吗?@AlexHoppus你能检查一下这个问题吗