Pete, Many thanks for your comment/concern. I borrowed an TIOCGICOUNT implementation from usb/serial/io_ti.c: case TIOCGICOUNT: dbg("%s - (%d) TIOCGICOUNT RX=%d, TX=%d", __func__, port->number, edge_port->icount.rx, edge_port->icount.tx); if (copy_to_user((void __user *)arg, &edge_port->icount, sizeof(edge_port->icount))) return -EFAULT; return 0; } There are 2 similar TIOCGICOUNT implementations listed in ark3116.c io_edgeport.c io_ti.c mos7720.c mos7840.c ti_usb_3410_5052.c files under usb/serial/ directory. One based on io_ti.c and another based on io_edgeport.c. I borrowed one from io_ti.c, since it looked more effecient to me. I searched for any mention of get_icount function under linux-2.6.35 and didn't find any file which declared or called this function: [vtsozik@SR71 linux-2.6.35]$ find . -type f -name '*.[c,h]' | xargs grep get_icount [vtsozik@SR71 linux-2.6.35]$ I'm wondering if you could give me a bit more information on this. Otherwise I would really prefer to proceed with something that already exists and tested. If by some reason you believe that alternative implementation from io_edgeport.c (please see code snippet below) should be used please let me know. Again I didn't see any reason for extra copy. case TIOCGICOUNT: cnow = edge_port->icount; memset(&icount, 0, sizeof(icount)); icount.cts = cnow.cts; icount.dsr = cnow.dsr; icount.rng = cnow.rng; icount.dcd = cnow.dcd; icount.rx = cnow.rx; icount.tx = cnow.tx; icount.frame = cnow.frame; icount.overrun = cnow.overrun; icount.parity = cnow.parity; icount.brk = cnow.brk; icount.buf_overrun = cnow.buf_overrun; dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d", __func__, port->number, icount.rx, icount.tx); if (copy_to_user((void __user *)arg, &icount, sizeof(icount))) return -EFAULT; return 0; } Thank you in advance, Vadim. --- On Sun, 12/26/10, Pete Zaitcev <zaitcev@xxxxxxxxxx> wrote: > From: Pete Zaitcev <zaitcev@xxxxxxxxxx> > Subject: Re: [PATCH 1/1] mct_u232: IOCTL implementation > To: "Tsozik" <tsozik@xxxxxxxxx> > Cc: "Greg Kroah-Hartman" <gregkh@xxxxxxx>, linux-usb@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx > Date: Sunday, December 26, 2010, 12:49 PM > On Sat, 25 Dec 2010 21:39:39 -0800 > (PST) > Tsozik <tsozik@xxxxxxxxx> > wrote: > > > +++ mct_u232.c 2010-12-25 21:44:57.714640343 > -0500 > > +static int mct_u232_ioctl(struct tty_struct > *tty, struct file *file, > > + > unsigned int cmd, > unsigned long arg) > > +{ > > + case TIOCGICOUNT: > > + > dbg("%s - (%d) TIOCGICOUNT RX=%d, TX=%d", __func__, > > + > port->number, > mct_u232_port->icount.rx, mct_u232_port->icount.tx); > > + > if (copy_to_user((void __user *)arg, > &mct_u232_port->icount, > > + > sizeof(mct_u232_port->icount))) > > + > return -EFAULT; > > This looks suspicious. Didn't we relocate the machinery for > TIOCGICOUNT > into a generic place? Please examine how ->get_icount > works before > hand-rolling the ioctl. > > -- Pete > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html