TAP_NUM_DEVS
err = alloc_chrdev_region(tap_major, 0, TAP_NUM_DEVS, device_name);
err = cdev_add(tap_cdev, *tap_major, TAP_NUM_DEVS);
unregister_chrdev_region(*tap_major, TAP_NUM_DEVS);
unregister_chrdev_region(major, TAP_NUM_DEVS);
retval = idr_alloc(&tap_major->minor_idr, tap, 1, TAP_NUM_DEVS, GFP_ATOMIC);