i want to add a system call(successfuly added) and pass the message(which contains int and a string)

/*code i used my program calling system call printmsg*/

message mm;
mm.m1_i1=10;
mm.m1_p1="hello";
printmsg(&mm);

/*user library*/

printmsg(*m1)
{
printf("integer is:%d",m1->m1_i1); /*getting correct output as 10*/
printf("str:%s",%s",m_in->m1_p1); /*getting output as hello*/
return(_syscall(FS,PRINTMSG,m1));
}


/* my system call code in misc.c */

int printmsg()
{
printf("integer is:%d",m_in.m1_i1); /*getting correct output as 10*/
printf("str:%s",%s",m_in.m1_p1); /*getting str: all_nr=%d slot1=%d */
return ok;
}

m_in which is a global varaible..m1 will be assigned to m_in once syscall is made. correct me if am wrong.

i could not able to pass the string to system call(kernel). am getting something like "str: all_nr=%d slot1=%d ".but if i print in user library am getting correct output.
i have sent lot of times to debug.. can onyone help me out..