Passing socket struct between kernel threads - module programming


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Passing socket struct between kernel threads - module programming
# 1  
Old 02-12-2009
Error Passing socket struct between kernel threads - module programming

I write kernel module with kernel threads using
linux/kthread.h on 2.6.* kernel

I tried to passing data between two kernel threads
with data argument of kthread_run( fun, data , NAME );
but this is not work I dont know why. I tried many possibility
and nothing works.

So I thought that maybe something like this will work
but not.
Code:
typedef struct my {
    struct socket *tmp;
    struct task_struct *task;
    int (*fun)(void * );
} table[10];
/* this is global static table */

int kthread_fun1(void *d) {
    sock_create( ...., &(tab[0].tmp) )
    printk(" %p ", tab[0].tmp ) <- THIS IS NOT NULL OK
}

int ktrhead_fun2( void *d ) {
    tab[0].tmp <- THIS IS NULL IN THIS CASE WHY

}

init_function_of_module {
    kthread_run( ..., fun1, ... )
 
    kthread_run( ..., fun2, ... )
}

Iam sure that fun1 thread was executed before fun2, I used semaphores ( actually completion mechanism ).
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Linux

Unload kernel module at boot time (Debian Wheezy 7.2, 3.2.0-4-686-pae kernel)

Hi everyone, I am trying to prevent the ehci_hcd kernel module to load at boot time. Here's what I've tried so far: 1) Add the following line to /etc/modprobe.d/blacklist.conf (as suggested here): 2) Blacklisted the module by adding the following string to 3) Tried to blacklist the module... (0 Replies)
Discussion started by: gacanepa
0 Replies

2. UNIX for Advanced & Expert Users

Get pointer for existing device class (struct class) in Linux kernel module

Hi all! I am trying to register a device in an existing device class, but I am having trouble getting the pointer to an existing class. I can create a class in a module, get the pointer to it and then use it to register the device with: *cl = class_create(THIS_MODULE, className);... (0 Replies)
Discussion started by: hdaniel@ualg.pt
0 Replies

3. IP Networking

help implementing an ip filter in linux/net/socket.c (kernel programming)

hi there so, i was given an assignment: implement a linux system call that blocks all packets that are sent to a given IP (i have to do it without using iptables) i'm really new to kernel programming btw (and i'm enjoying it a lot) so, my syscall is called ip_block() and receives a... (1 Reply)
Discussion started by: lgfaria
1 Replies

4. IP Networking

socket programming using threads

Hi, 1)i wrote a program which acts lik a client gateway serving clients request and sending probe msg`s to server to chech if its active.. 2)both moduels interact when run independently my problem is that when i tr to run them as two different threads in a single program(client_gateway prog to... (4 Replies)
Discussion started by: sameer kulkarni
4 Replies

5. Homework & Coursework Questions

Passing pointers to struct

Hi, i'm trying to copy a struct into a binary file using the unix instruction write, so i declare and fill the struct "superbloque" in one function "initSB" and then i pass the pointer to another function called bwrite (for block write) which calls write. The problem is that i call the function... (2 Replies)
Discussion started by: ignatius3
2 Replies

6. UNIX for Dummies Questions & Answers

Passing struct through unix pipe -solved

EDIT: Nevermind, called a friend who is good at this stuff and he figured it out :D Hi all, So I'm trying to teach myself to write programs for unix in c. I am currently creating a program, and I need to pass a struct through a pipe, but I can't figure out how. The struct I want to pass... (0 Replies)
Discussion started by: twnsfn34
0 Replies

7. Linux

where is struct tq_struct in 2.6 kernel

hi masters, I am new to kernel programming and learning its trade. I am writing a module for lan bandwidth manager. I designed one module successfully for 2.4 kernel . But when I tried to upgrade it for 2.6 kernel I found that struct tq_struct is missing . Is there any suitable replacement for... (0 Replies)
Discussion started by: iamjayanth
0 Replies

8. Linux

How to convert Linux Kernel built-in module into a loadable module

Hi all, I am working on USB data monitoring on Fedora Core 9. Kernel 2.6.25 has a built-in module (the one that isn't loadable, but compiles and links statically with the kernel during compilation) to snoop USB data. It is in <kernel_source_code>/drivers/usb/mon/. I need to know if I can... (0 Replies)
Discussion started by: anitemp
0 Replies

9. SuSE

max number of slabs per kernel module (kernel 2.6.17, suse)

Hi All, Is there a max number of slabs that can be used per kernel module? I'm having a tough time finding out that kind of information, but the array 'node_zonelists' (mmzone.h) has a size of 5. I just want to avoid buffer overruns and other bad stuff. Cheers, Brendan (4 Replies)
Discussion started by: Brendan Kennedy
4 Replies

10. Linux

Making Socket System Call From Linux Kernel Module?

Hi Everyone! How can we make a socket() system call from a linux module executing in kernel space? If any one knows, kindly tell me. It will be great. I want to use the socket interface in linux kernel space for sending raw packets over the network. Hamayun (0 Replies)
Discussion started by: mian_m_hamayun
0 Replies
Login or Register to Ask a Question
select_enqueue(9r)														select_enqueue(9r)

NAME
select_enqueue - General: Adds the current kernel thread SYNOPSIS
void select_enqueue( sel_queue_t *selq ); ARGUMENTS
Specifies a pointer to a sel_queue structure. DESCRIPTION
The select_enqueue routine adds the current kernel thread to the list of kernel threads waiting for a select event on the specified device. This routine is called when a kernel module's select routine has been called and the requested event cannot be immediately satisfied. For example, the requested event cannot be immediately satisfied when xxselect is called for the following reasons: To select on input and there are no characters available When called for output and the kernel module's output buffers are currently full By calling select_enqueue, the kernel module's select routine ensures that the kernel thread issuing the select call will be blocked until the requested event can be satisfied or until the select call terminates. CAUTIONS
You must call the queue_init routine to initialize the sel_queue structure pointer prior to calling select_enqueue. Failure to do so causes the kernel to panic. RETURN VALUES
None FILES
SEE ALSO
Routines: queue_init(9r), select_dequeue(9r), select_dequeue_all(9r), select_wakeup(9r) Data Structures: sel_queue(9s) System Calls: select(2) select_enqueue(9r)