On 10/07/2010 12:36 AM, Savoy, Pavan wrote: >>>>> +int st_core_init(struct st_data_s **core_data) >>>>> +{ >>>>> + struct st_data_s *st_gdata; >>>>> + long err; >>>>> + static struct tty_ldisc_ops *st_ldisc_ops; >>>>> + >>>>> + /* populate and register to TTY line discipline */ >>>>> + st_ldisc_ops = kzalloc(sizeof(*st_ldisc_ops), GFP_KERNEL); >>>>> + if (!st_ldisc_ops) { >>>>> + pr_err("no mem to allocate"); >>>>> + return -ENOMEM; >>>>> + } >>>>> + >>>>> + st_ldisc_ops->magic = TTY_LDISC_MAGIC; >>>>> + st_ldisc_ops->name = "n_st"; /*"n_hci"; */ >>>>> + st_ldisc_ops->open = st_tty_open; >>>>> + st_ldisc_ops->close = st_tty_close; >>>>> + st_ldisc_ops->receive_buf = st_tty_receive; >>>>> + st_ldisc_ops->write_wakeup = st_tty_wakeup; >>>>> + st_ldisc_ops->flush_buffer = st_tty_flush_buffer; >>>>> + st_ldisc_ops->owner = THIS_MODULE; >>>> >>>> This can be static structure, you don't need to allocate this on heap. >>>> It should be a singleton. >>> >>> Yes, I got this comment before, but is it just a style issue? >>> I want to keep this in heap because some day, I hope TTY ldics have their >> own >>> private_data, which I can pass around like the tty_struct's data. >>> and having them in heap, I plan to keep a reference to ops structure, so >> that I >>> can pass around and use ops->private_data everywhere .. >> >> I doubt ldisc ops will ever have ->private_data. What would you need it >> for? The ops generally work with ttys which have ->disc_data. > > Yes, But in this case, I required something which can be set during ldisc_register, and can be picked up during tty_open. Why? ldiscs are per-system, singletons, not per-device. So you should not bind to them any device specific info. regards, -- js _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel