lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  PHC 
Open Source and information security mailing list archives
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 20 Dec 2011 10:24:53 +0100
From:	Monica Puig-Pey <>
To:	<>, <>
Subject: Problem: plist_add undefined!

Hi there,

As I told in previous posts in this list I'm developing drivers for the

linux-rt kernel version in Ubuntu 10.04, based on 2.6.31 with rt_preempt 

Currently I'm studying how to use priority lists (linux/plist.h) in a 
module. I read some pages from the Linux Kernel Development book to 
learn how linked list work in the kernel.

I made and easy example, shown below, trying to put three elements, with 
their priorities, in a plist_head.

Then, I had two problems:

* First error:

   An error is produced when using the MACROs:
     - PLIST_HEAD_INIT(head, _lock)
     - PLIST_NODE_INIT(node, __prio)

   it says :

/home/monica/Escritorio/plists/priolist.c: In function 'init_module': 
/home/monica/Escritorio/plists/priolist.c:67: error: expected expression 
before '.' token

   --> To solve this I used the functions:

- static inline void plist_head_init(struct plist_head *head, struct 
spinlock *lock)

- static inline void plist_node_init(struct plist_node *node, int prio)

   But I still have the problem with the MACRO

* Second error, problem using plist_add:

   It says:

“WARNING: "plist_add" [/home/monica/Escritorio/plists/priolist.ko] 
undefined! ”

   I made the module GPL, I don't know what am I doing wrong.

Does anybody have an idea what is happening?

Thanks in advance for any help,




#include <linux/module.h>	
#include <linux/kernel.h>
#include <linux/ioport.h>
#include <linux/plist.h>
#include <linux/spinlock.h>


#define pid_miguel 1
#define fichero_miguel 1
#define prio_miguel 10

#define pid_monica 2
#define fichero_monica 1
#define prio_monica 30

#define pid_hector 3
#define fichero_hector 1
#define prio_hector 20

static DEFINE_SPINLOCK(lock);

struct misdatos
   int pid;
   int fichero;
   struct plist_node token_del_plist;

int init_module(void)

   struct plist_head mi_lista_de_datos;
   //struct spinlock lock;
   struct misdatos datos_miguel;
   struct misdatos datos_monica;
   struct misdatos datos_hector;

   struct misdatos *elemento_iterador;

   // Inicializo mi lista
   //PLIST_HEAD_INIT( mi_lista_de_datos, lock);
   plist_head_init( &mi_lista_de_datos, &lock);

   // Creo mis datos = pid_miguel;
   datos_miguel.fichero = fichero_miguel; = pid_monica;
   datos_monica.fichero = fichero_monica; = pid_hector;
   datos_hector.fichero = fichero_hector;

   // Inicializamos los nodos CON LA PRIORIDAD
   //PLIST_NODE_INIT(datos_miguel.token_del_plist, prio_miguel);
   //PLIST_NODE_INIT(datos_monica.token_del_plist, prio_monica);
   //PLIST_NODE_INIT(datos_hector.token_del_plist, prio_hector);
   plist_node_init(&datos_miguel.token_del_plist, prio_miguel);
   plist_node_init(&datos_monica.token_del_plist, prio_monica);
   plist_node_init(&datos_hector.token_del_plist, prio_hector);

   // Los agnadimos
   plist_add(&(datos_miguel.token_del_plist), &mi_lista_de_datos);
   plist_add(&(datos_monica.token_del_plist), &mi_lista_de_datos);
   plist_add(&(datos_hector.token_del_plist), &mi_lista_de_datos);

plist_for_each_entry(elemento_iterador, &mi_lista_de_datos, token_del_plist)


printk(KERN_INFO "El pid es : %d, con prioridad %d\n", 
elemento_iterador->pid, elemento_iterador->token_del_plist.prio);

   return 0;

void cleanup_module(void)
printk(KERN_INFO "cleanup_module() called\n");

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

Powered by blists - more mailing lists