Hello, everyone.
I am modifying the datapath of ovs to queue incoming packets and delay the time 
of process of them.
In datapath.c, I added codes creating a thread that inputs incoming packets to 
a queue, and process them later (in regular).
Once ovs_dp_process_received_packet() is called, it queues an incoming packet 
to my queue and return, and later
my thread process packets queued through calling 
ovs_dp_process_received_packet() again.
To do that, points of vport and sk_buff should be queued and dequeued.
I used udelay() to make my thread process its job in regular.
But, when I loaded my modified module into kernel, it made kernel frozen.
I do not know how to debug kernel well, but I checked log of dmesg and I could 
not find any reason.
So, I replaced udelay() with schedule_timeout(), and at that time kernel did 
not die.
However, after a few seconds, the kernel died too.
I do not understand why this happened.
I used spinlock technique to protect my queue between regular datapath and the 
process of my thread.
raw_spin_lock_irqsave() and raw_spin_unlock_irqrestore() were used, because 
spin_lock() and spin_unlock() freeze kernel (I do not understand).
Does anyone know why this happened and what I have to do?
 
- Namwon An 
_______________________________________________
discuss mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to