|
Message Q (sys_msgsnd) in Kernel
I have tried obtaining the memory using kmalloc as well as declaring it as a local variable. Result is the same in either case. My msgbuf structure is:
struct MsgQ_Packet
{
long mtype;
unsigned short length;
unsigned short opcode;
unsigned short subfield;
unsigned short debug;
unsigned char msg[2];
};
case 1:
/* Global */
struct MsgQ_Packet *my_tx_msg = NULL;
void init(void) {
..
my_tx_msg = kmalloc(sizeof(struct MsgQ_Packet),GFP_KERNEL);
..
}
void sendmessage(u16 opcode, u16 subfield) {
..
ret = sys_msgsnd(drv_qid, (struct msgbuf *)my_tx_msg, sizeof(struct MsgQ_Packet) - sizeof(long), IPC_NOWAIT);
..
}
case 2:
void sendmessage(u16 opcode, u16 subfield) {
struct MsgQ_Packet my_tx_msg ;
..
ret = sys_msgsnd(drv_qid, (struct msgbuf *)&my_tx_msg, sizeof(struct MsgQ_Packet) - sizeof(long), IPC_NOWAIT);
..
}
|