... static int suspend_count = 0; ... static int my_suspend(struct pci_dev *dev, pm_message_t state) { suspend_count++; printk("my_suspend(%p, %d)\n", dev, suspend_count); return 0; } static int my_resume(struct pci_dev *dev) { suspend_count++; printk("my_resume(%p, %d)\n", dev, suspend_count); return 0; } ... static struct pci_device_id pci_drv_tbl[] = { {MY_VENDOR_ID, MY_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0, } }; static struct pci_driver pci_drv = { name: "pci_drv", id_table: pci_drv_tbl, probe: pci_init_one, remove: pci_remove_one, suspend: my_suspend, resume: my_resume, }; static int __init pci_drv_init(void) { int ret; if ((major = register_chrdev(0, "driver-name", &driver_fops)) != 0) { if ((ret = pci_register_driver(&pci_drv)) < 0 ) { printk(KERN_ERR "can't register PCI driver (%d)\n", ret); unregister_chrdev(major, "driver-name"); return -EIO; } return 0; } return -EIO; } static void __exit pci_drv_exit(void) { pci_unregister_driver(&pci_drv); unregister_chrdev(240, "driver-name"); printk("pci_drv_exit(%d)\n", suspend_count); } ...