--- drivers/ata/ahci.c | 6 ++++ drivers/ata/ata_generic.c | 4 +++ drivers/ata/ata_piix.c | 8 ++++++ drivers/ata/libata-core.c | 52 ++++++++++++++++++++++++++++++++++++++++ drivers/ata/pata_acpi.c | 4 +++ drivers/ata/pata_ali.c | 8 ++++++ drivers/ata/pata_amd.c | 11 ++++++++ drivers/ata/pata_artop.c | 5 +++ drivers/ata/pata_at32.c | 4 +++ drivers/ata/pata_atiixp.c | 4 +++ drivers/ata/pata_bf54x.c | 4 +++ drivers/ata/pata_cmd640.c | 4 +++ drivers/ata/pata_cmd64x.c | 7 +++++ drivers/ata/pata_cs5520.c | 4 +++ drivers/ata/pata_cs5530.c | 4 +++ drivers/ata/pata_cs5535.c | 4 +++ drivers/ata/pata_cs5536.c | 4 +++ drivers/ata/pata_cypress.c | 4 +++ drivers/ata/pata_efar.c | 4 +++ drivers/ata/pata_hpt366.c | 4 +++ drivers/ata/pata_hpt37x.c | 7 +++++ drivers/ata/pata_hpt3x2n.c | 4 +++ drivers/ata/pata_hpt3x3.c | 4 +++ drivers/ata/pata_icside.c | 4 +++ drivers/ata/pata_isapnp.c | 4 +++ drivers/ata/pata_it8213.c | 4 +++ drivers/ata/pata_it821x.c | 5 +++ drivers/ata/pata_ixp4xx_cf.c | 4 +++ drivers/ata/pata_jmicron.c | 4 +++ drivers/ata/pata_legacy.c | 14 ++++++++++ drivers/ata/pata_marvell.c | 4 +++ drivers/ata/pata_mpc52xx.c | 4 +++ drivers/ata/pata_mpiix.c | 4 +++ drivers/ata/pata_netcell.c | 4 +++ drivers/ata/pata_ninja32.c | 4 +++ drivers/ata/pata_ns87410.c | 4 +++ drivers/ata/pata_ns87415.c | 5 +++ drivers/ata/pata_oldpiix.c | 4 +++ drivers/ata/pata_opti.c | 4 +++ drivers/ata/pata_optidma.c | 5 +++ drivers/ata/pata_pcmcia.c | 5 +++ drivers/ata/pata_pdc2027x.c | 5 +++ drivers/ata/pata_pdc202xx_old.c | 5 +++ drivers/ata/pata_platform.c | 4 +++ drivers/ata/pata_qdi.c | 5 +++ drivers/ata/pata_radisys.c | 4 +++ drivers/ata/pata_rz1000.c | 4 +++ drivers/ata/pata_sc1200.c | 4 +++ drivers/ata/pata_scc.c | 4 +++ drivers/ata/pata_serverworks.c | 5 +++ drivers/ata/pata_sil680.c | 4 +++ drivers/ata/pata_sis.c | 10 +++++++ drivers/ata/pata_sl82c105.c | 4 +++ drivers/ata/pata_triflex.c | 4 +++ drivers/ata/pata_via.c | 5 +++ drivers/ata/pata_winbond.c | 4 +++ drivers/ata/pdc_adma.c | 4 +++ drivers/ata/sata_fsl.c | 4 +++ drivers/ata/sata_inic162x.c | 4 +++ drivers/ata/sata_mv.c | 7 +++++ drivers/ata/sata_nv.c | 10 +++++++ drivers/ata/sata_promise.c | 7 +++++ drivers/ata/sata_qstor.c | 4 +++ drivers/ata/sata_sil.c | 4 +++ drivers/ata/sata_sil24.c | 4 +++ drivers/ata/sata_sis.c | 4 +++ drivers/ata/sata_svw.c | 4 +++ drivers/ata/sata_sx4.c | 4 +++ drivers/ata/sata_uli.c | 4 +++ drivers/ata/sata_via.c | 6 ++++ drivers/ata/sata_vsc.c | 4 +++ include/linux/libata.h | 3 ++ kernel/kallsyms.c | 1 73 files changed, 399 insertions(+) Index: work/drivers/ata/ahci.c =================================================================== --- work.orig/drivers/ata/ahci.c +++ work/drivers/ata/ahci.c @@ -2212,6 +2212,12 @@ static int ahci_init_one(struct pci_dev static int __init ahci_init(void) { + { + ata_dump_sht(DRV_NAME, &ahci_sht); + ata_dump_ops(DRV_NAME, &ahci_ops); + ata_dump_ops(DRV_NAME, &ahci_vt8251_ops); + ata_dump_ops(DRV_NAME, &ahci_p5wdh_ops); + } return pci_register_driver(&ahci_pci_driver); } Index: work/drivers/ata/ata_generic.c =================================================================== --- work.orig/drivers/ata/ata_generic.c +++ work/drivers/ata/ata_generic.c @@ -187,6 +187,10 @@ static struct pci_driver ata_generic_pci static int __init ata_generic_init(void) { + { + ata_dump_sht(DRV_NAME, &generic_sht); + ata_dump_ops(DRV_NAME, &generic_port_ops); + } return pci_register_driver(&ata_generic_pci_driver); } Index: work/drivers/ata/ata_piix.c =================================================================== --- work.orig/drivers/ata/ata_piix.c +++ work/drivers/ata/ata_piix.c @@ -1558,6 +1558,14 @@ static int __init piix_init(void) in_module_init = 0; DPRINTK("done\n"); + { + ata_dump_sht(DRV_NAME, &piix_sht); + ata_dump_ops(DRV_NAME, &piix_pata_ops); + ata_dump_ops(DRV_NAME, &piix_vmw_ops); + ata_dump_ops(DRV_NAME, &ich_pata_ops); + ata_dump_ops(DRV_NAME, &piix_sata_ops); + ata_dump_ops(DRV_NAME, &piix_sidpr_sata_ops); + } return 0; } Index: work/drivers/ata/pata_acpi.c =================================================================== --- work.orig/drivers/ata/pata_acpi.c +++ work/drivers/ata/pata_acpi.c @@ -295,6 +295,10 @@ static struct pci_driver pacpi_pci_drive static int __init pacpi_init(void) { + { + ata_dump_sht(DRV_NAME, &pacpi_sht); + ata_dump_ops(DRV_NAME, &pacpi_ops); + } return pci_register_driver(&pacpi_pci_driver); } Index: work/drivers/ata/pata_ali.c =================================================================== --- work.orig/drivers/ata/pata_ali.c +++ work/drivers/ata/pata_ali.c @@ -557,6 +557,14 @@ static struct pci_driver ali_pci_driver static int __init ali_init(void) { + { + ata_dump_sht(DRV_NAME, &ali_sht); + ata_dump_ops(DRV_NAME, &ali_early_port_ops); + ata_dump_ops(DRV_NAME, &ali_dma_base_ops); + ata_dump_ops(DRV_NAME, &ali_20_port_ops); + ata_dump_ops(DRV_NAME, &ali_c2_port_ops); + ata_dump_ops(DRV_NAME, &ali_c5_port_ops); + } return pci_register_driver(&ali_pci_driver); } Index: work/drivers/ata/pata_amd.c =================================================================== --- work.orig/drivers/ata/pata_amd.c +++ work/drivers/ata/pata_amd.c @@ -614,6 +614,17 @@ static struct pci_driver amd_pci_driver static int __init amd_init(void) { + { + ata_dump_sht(DRV_NAME, &amd_sht); + ata_dump_ops(DRV_NAME, &amd_base_port_ops); + ata_dump_ops(DRV_NAME, &amd33_port_ops); + ata_dump_ops(DRV_NAME, &amd66_port_ops); + ata_dump_ops(DRV_NAME, &amd100_port_ops); + ata_dump_ops(DRV_NAME, &amd133_port_ops); + ata_dump_ops(DRV_NAME, &nv_base_port_ops); + ata_dump_ops(DRV_NAME, &nv100_port_ops); + ata_dump_ops(DRV_NAME, &nv133_port_ops); + } return pci_register_driver(&amd_pci_driver); } Index: work/drivers/ata/pata_artop.c =================================================================== --- work.orig/drivers/ata/pata_artop.c +++ work/drivers/ata/pata_artop.c @@ -456,6 +456,11 @@ static struct pci_driver artop_pci_drive static int __init artop_init(void) { + { + ata_dump_sht(DRV_NAME, &artop_sht); + ata_dump_ops(DRV_NAME, &artop6210_ops); + ata_dump_ops(DRV_NAME, &artop6260_ops); + } return pci_register_driver(&artop_pci_driver); } Index: work/drivers/ata/pata_at32.c =================================================================== --- work.orig/drivers/ata/pata_at32.c +++ work/drivers/ata/pata_at32.c @@ -391,6 +391,10 @@ static struct platform_driver pata_at32_ static int __init pata_at32_init(void) { + { + ata_dump_sht(DRV_NAME, &at32_sht); + ata_dump_ops(DRV_NAME, &at32_port_ops); + } return platform_driver_probe(&pata_at32_driver, pata_at32_probe); } Index: work/drivers/ata/pata_atiixp.c =================================================================== --- work.orig/drivers/ata/pata_atiixp.c +++ work/drivers/ata/pata_atiixp.c @@ -273,6 +273,10 @@ static struct pci_driver atiixp_pci_driv static int __init atiixp_init(void) { + { + ata_dump_sht(DRV_NAME, &atiixp_sht); + ata_dump_ops(DRV_NAME, &atiixp_port_ops); + } return pci_register_driver(&atiixp_pci_driver); } Index: work/drivers/ata/pata_bf54x.c =================================================================== --- work.orig/drivers/ata/pata_bf54x.c +++ work/drivers/ata/pata_bf54x.c @@ -1596,6 +1596,10 @@ static int __init bfin_atapi_init(void) bfin_port_info[0].udma_mask = ATA_UDMA5; }; + { + ata_dump_sht(DRV_NAME, &bfin_sht); + ata_dump_ops(DRV_NAME, &bfin_pata_ops); + } return platform_driver_register(&bfin_atapi_driver); } Index: work/drivers/ata/pata_cmd640.c =================================================================== --- work.orig/drivers/ata/pata_cmd640.c +++ work/drivers/ata/pata_cmd640.c @@ -261,6 +261,10 @@ static struct pci_driver cmd640_pci_driv static int __init cmd640_init(void) { + { + ata_dump_sht(DRV_NAME, &cmd640_sht); + ata_dump_ops(DRV_NAME, &cmd640_port_ops); + } return pci_register_driver(&cmd640_pci_driver); } Index: work/drivers/ata/pata_cmd64x.c =================================================================== --- work.orig/drivers/ata/pata_cmd64x.c +++ work/drivers/ata/pata_cmd64x.c @@ -428,6 +428,13 @@ static struct pci_driver cmd64x_pci_driv static int __init cmd64x_init(void) { + { + ata_dump_sht(DRV_NAME, &cmd64x_sht); + ata_dump_ops(DRV_NAME, &cmd64x_base_ops); + ata_dump_ops(DRV_NAME, &cmd64x_port_ops); + ata_dump_ops(DRV_NAME, &cmd646r1_port_ops); + ata_dump_ops(DRV_NAME, &cmd648_port_ops); + } return pci_register_driver(&cmd64x_pci_driver); } Index: work/drivers/ata/pata_cs5520.c =================================================================== --- work.orig/drivers/ata/pata_cs5520.c +++ work/drivers/ata/pata_cs5520.c @@ -342,6 +342,10 @@ static struct pci_driver cs5520_pci_driv static int __init cs5520_init(void) { + { + ata_dump_sht(DRV_NAME, &cs5520_sht); + ata_dump_ops(DRV_NAME, &cs5520_port_ops); + } return pci_register_driver(&cs5520_pci_driver); } Index: work/drivers/ata/pata_cs5530.c =================================================================== --- work.orig/drivers/ata/pata_cs5530.c +++ work/drivers/ata/pata_cs5530.c @@ -368,6 +368,10 @@ static struct pci_driver cs5530_pci_driv static int __init cs5530_init(void) { + { + ata_dump_sht(DRV_NAME, &cs5530_sht); + ata_dump_ops(DRV_NAME, &cs5530_port_ops); + } return pci_register_driver(&cs5530_pci_driver); } Index: work/drivers/ata/pata_cs5535.c =================================================================== --- work.orig/drivers/ata/pata_cs5535.c +++ work/drivers/ata/pata_cs5535.c @@ -222,6 +222,10 @@ static struct pci_driver cs5535_pci_driv static int __init cs5535_init(void) { + { + ata_dump_sht(DRV_NAME, &cs5535_sht); + ata_dump_ops(DRV_NAME, &cs5535_port_ops); + } return pci_register_driver(&cs5535_pci_driver); } Index: work/drivers/ata/pata_cs5536.c =================================================================== --- work.orig/drivers/ata/pata_cs5536.c +++ work/drivers/ata/pata_cs5536.c @@ -283,6 +283,10 @@ static struct pci_driver cs5536_pci_driv static int __init cs5536_init(void) { + { + ata_dump_sht(DRV_NAME, &cs5536_sht); + ata_dump_ops(DRV_NAME, &cs5536_port_ops); + } return pci_register_driver(&cs5536_pci_driver); } Index: work/drivers/ata/pata_cypress.c =================================================================== --- work.orig/drivers/ata/pata_cypress.c +++ work/drivers/ata/pata_cypress.c @@ -159,6 +159,10 @@ static struct pci_driver cy82c693_pci_dr static int __init cy82c693_init(void) { + { + ata_dump_sht(DRV_NAME, &cy82c693_sht); + ata_dump_ops(DRV_NAME, &cy82c693_port_ops); + } return pci_register_driver(&cy82c693_pci_driver); } Index: work/drivers/ata/pata_efar.c =================================================================== --- work.orig/drivers/ata/pata_efar.c +++ work/drivers/ata/pata_efar.c @@ -298,6 +298,10 @@ static struct pci_driver efar_pci_driver static int __init efar_init(void) { + { + ata_dump_sht(DRV_NAME, &efar_sht); + ata_dump_ops(DRV_NAME, &efar_ops); + } return pci_register_driver(&efar_pci_driver); } Index: work/drivers/ata/pata_hpt366.c =================================================================== --- work.orig/drivers/ata/pata_hpt366.c +++ work/drivers/ata/pata_hpt366.c @@ -430,6 +430,10 @@ static struct pci_driver hpt36x_pci_driv static int __init hpt36x_init(void) { + { + ata_dump_sht(DRV_NAME, &hpt36x_sht); + ata_dump_ops(DRV_NAME, &hpt366_port_ops); + } return pci_register_driver(&hpt36x_pci_driver); } Index: work/drivers/ata/pata_hpt37x.c =================================================================== --- work.orig/drivers/ata/pata_hpt37x.c +++ work/drivers/ata/pata_hpt37x.c @@ -1073,6 +1073,13 @@ static struct pci_driver hpt37x_pci_driv static int __init hpt37x_init(void) { + { + ata_dump_sht(DRV_NAME, &hpt37x_sht); + ata_dump_ops(DRV_NAME, &hpt370_port_ops); + ata_dump_ops(DRV_NAME, &hpt370a_port_ops); + ata_dump_ops(DRV_NAME, &hpt372_port_ops); + ata_dump_ops(DRV_NAME, &hpt374_port_ops); + } return pci_register_driver(&hpt37x_pci_driver); } Index: work/drivers/ata/pata_hpt3x2n.c =================================================================== --- work.orig/drivers/ata/pata_hpt3x2n.c +++ work/drivers/ata/pata_hpt3x2n.c @@ -590,6 +590,10 @@ static struct pci_driver hpt3x2n_pci_dri static int __init hpt3x2n_init(void) { + { + ata_dump_sht(DRV_NAME, &hpt3x2n_sht); + ata_dump_ops(DRV_NAME, &hpt3x2n_port_ops); + } return pci_register_driver(&hpt3x2n_pci_driver); } Index: work/drivers/ata/pata_hpt3x3.c =================================================================== --- work.orig/drivers/ata/pata_hpt3x3.c +++ work/drivers/ata/pata_hpt3x3.c @@ -240,6 +240,10 @@ static struct pci_driver hpt3x3_pci_driv static int __init hpt3x3_init(void) { + { + ata_dump_sht(DRV_NAME, &hpt3x3_sht); + ata_dump_ops(DRV_NAME, &hpt3x3_port_ops); + } return pci_register_driver(&hpt3x3_pci_driver); } Index: work/drivers/ata/pata_icside.c =================================================================== --- work.orig/drivers/ata/pata_icside.c +++ work/drivers/ata/pata_icside.c @@ -637,6 +637,10 @@ static struct ecard_driver pata_icside_d static int __init pata_icside_init(void) { + { + ata_dump_sht(DRV_NAME, &pata_icside_sht); + ata_dump_ops(DRV_NAME, &pata_icside_port_ops); + } return ecard_register_driver(&pata_icside_driver); } Index: work/drivers/ata/pata_isapnp.c =================================================================== --- work.orig/drivers/ata/pata_isapnp.c +++ work/drivers/ata/pata_isapnp.c @@ -122,6 +122,10 @@ static struct pnp_driver isapnp_driver = static int __init isapnp_init(void) { + { + ata_dump_sht(DRV_NAME, &isapnp_sht); + ata_dump_ops(DRV_NAME, &isapnp_port_ops); + } return pnp_register_driver(&isapnp_driver); } Index: work/drivers/ata/pata_it8213.c =================================================================== --- work.orig/drivers/ata/pata_it8213.c +++ work/drivers/ata/pata_it8213.c @@ -310,6 +310,10 @@ static struct pci_driver it8213_pci_driv static int __init it8213_init(void) { + { + ata_dump_sht(DRV_NAME, &it8213_sht); + ata_dump_ops(DRV_NAME, &it8213_ops); + } return pci_register_driver(&it8213_pci_driver); } Index: work/drivers/ata/pata_it821x.c =================================================================== --- work.orig/drivers/ata/pata_it821x.c +++ work/drivers/ata/pata_it821x.c @@ -764,6 +764,11 @@ static struct pci_driver it821x_pci_driv static int __init it821x_init(void) { + { + ata_dump_sht(DRV_NAME, &it821x_sht); + ata_dump_ops(DRV_NAME, &it821x_smart_port_ops); + ata_dump_ops(DRV_NAME, &it821x_passthru_port_ops); + } return pci_register_driver(&it821x_pci_driver); } Index: work/drivers/ata/pata_ixp4xx_cf.c =================================================================== --- work.orig/drivers/ata/pata_ixp4xx_cf.c +++ work/drivers/ata/pata_ixp4xx_cf.c @@ -209,6 +209,10 @@ static struct platform_driver ixp4xx_pat static int __init ixp4xx_pata_init(void) { + { + ata_dump_sht(DRV_NAME, &ixp4xx_sht); + ata_dump_ops(DRV_NAME, &ixp4xx_port_ops); + } return platform_driver_register(&ixp4xx_pata_platform_driver); } Index: work/drivers/ata/pata_jmicron.c =================================================================== --- work.orig/drivers/ata/pata_jmicron.c +++ work/drivers/ata/pata_jmicron.c @@ -180,6 +180,10 @@ static struct pci_driver jmicron_pci_dri static int __init jmicron_init(void) { + { + ata_dump_sht(DRV_NAME, &jmicron_sht); + ata_dump_ops(DRV_NAME, &jmicron_ops); + } return pci_register_driver(&jmicron_pci_driver); } Index: work/drivers/ata/pata_legacy.c =================================================================== --- work.orig/drivers/ata/pata_legacy.c +++ work/drivers/ata/pata_legacy.c @@ -1267,6 +1267,20 @@ static __init int legacy_init(void) } if (ct != 0) return 0; + { + ata_dump_sht(DRV_NAME, &legacy_sht); + ata_dump_ops(DRV_NAME, &simple_port_ops); + ata_dump_ops(DRV_NAME, &legacy_port_ops); + ata_dump_ops(DRV_NAME, &pdc20230_port_ops); + ata_dump_ops(DRV_NAME, &ht6560a_port_ops); + ata_dump_ops(DRV_NAME, &ht6560b_port_ops); + ata_dump_ops(DRV_NAME, &opti82c611a_port_ops); + ata_dump_ops(DRV_NAME, &opti82c46x_port_ops); + ata_dump_ops(DRV_NAME, &qdi6500_port_ops); + ata_dump_ops(DRV_NAME, &qdi6580_port_ops); + ata_dump_ops(DRV_NAME, &qdi6580dp_port_ops); + ata_dump_ops(DRV_NAME, &winbond_port_ops); + } return -ENODEV; } Index: work/drivers/ata/pata_marvell.c =================================================================== --- work.orig/drivers/ata/pata_marvell.c +++ work/drivers/ata/pata_marvell.c @@ -168,6 +168,10 @@ static struct pci_driver marvell_pci_dri static int __init marvell_init(void) { + { + ata_dump_sht(DRV_NAME, &marvell_sht); + ata_dump_ops(DRV_NAME, &marvell_ops); + } return pci_register_driver(&marvell_pci_driver); } Index: work/drivers/ata/pata_mpc52xx.c =================================================================== --- work.orig/drivers/ata/pata_mpc52xx.c +++ work/drivers/ata/pata_mpc52xx.c @@ -503,6 +503,10 @@ static int __init mpc52xx_ata_init(void) { printk(KERN_INFO "ata: MPC52xx IDE/ATA libata driver\n"); + { + ata_dump_sht(DRV_NAME, &mpc52xx_ata_sht); + ata_dump_ops(DRV_NAME, &mpc52xx_ata_port_ops); + } return of_register_platform_driver(&mpc52xx_ata_of_platform_driver); } Index: work/drivers/ata/pata_mpiix.c =================================================================== --- work.orig/drivers/ata/pata_mpiix.c +++ work/drivers/ata/pata_mpiix.c @@ -247,6 +247,10 @@ static struct pci_driver mpiix_pci_drive static int __init mpiix_init(void) { + { + ata_dump_sht(DRV_NAME, &mpiix_sht); + ata_dump_ops(DRV_NAME, &mpiix_port_ops); + } return pci_register_driver(&mpiix_pci_driver); } Index: work/drivers/ata/pata_netcell.c =================================================================== --- work.orig/drivers/ata/pata_netcell.c +++ work/drivers/ata/pata_netcell.c @@ -94,6 +94,10 @@ static struct pci_driver netcell_pci_dri static int __init netcell_init(void) { + { + ata_dump_sht(DRV_NAME, &netcell_sht); + ata_dump_ops(DRV_NAME, &netcell_ops); + } return pci_register_driver(&netcell_pci_driver); } Index: work/drivers/ata/pata_ninja32.c =================================================================== --- work.orig/drivers/ata/pata_ninja32.c +++ work/drivers/ata/pata_ninja32.c @@ -156,6 +156,10 @@ static struct pci_driver ninja32_pci_dri static int __init ninja32_init(void) { + { + ata_dump_sht(DRV_NAME, &ninja32_sht); + ata_dump_ops(DRV_NAME, &ninja32_port_ops); + } return pci_register_driver(&ninja32_pci_driver); } Index: work/drivers/ata/pata_ns87410.c =================================================================== --- work.orig/drivers/ata/pata_ns87410.c +++ work/drivers/ata/pata_ns87410.c @@ -186,6 +186,10 @@ static struct pci_driver ns87410_pci_dri static int __init ns87410_init(void) { + { + ata_dump_sht(DRV_NAME, &ns87410_sht); + ata_dump_ops(DRV_NAME, &ns87410_port_ops); + } return pci_register_driver(&ns87410_pci_driver); } Index: work/drivers/ata/pata_ns87415.c =================================================================== --- work.orig/drivers/ata/pata_ns87415.c +++ work/drivers/ata/pata_ns87415.c @@ -399,6 +399,11 @@ static struct pci_driver ns87415_pci_dri static int __init ns87415_init(void) { + { + ata_dump_sht(DRV_NAME, &ns87415_sht); + ata_dump_ops(DRV_NAME, &ns87415_pata_ops); + //ata_dump_ops(DRV_NAME, &ns87560_pata_ops); + } return pci_register_driver(&ns87415_pci_driver); } Index: work/drivers/ata/pata_oldpiix.c =================================================================== --- work.orig/drivers/ata/pata_oldpiix.c +++ work/drivers/ata/pata_oldpiix.c @@ -286,6 +286,10 @@ static struct pci_driver oldpiix_pci_dri static int __init oldpiix_init(void) { + { + ata_dump_sht(DRV_NAME, &oldpiix_sht); + ata_dump_ops(DRV_NAME, &oldpiix_pata_ops); + } return pci_register_driver(&oldpiix_pci_driver); } Index: work/drivers/ata/pata_opti.c =================================================================== --- work.orig/drivers/ata/pata_opti.c +++ work/drivers/ata/pata_opti.c @@ -212,6 +212,10 @@ static struct pci_driver opti_pci_driver static int __init opti_init(void) { + { + ata_dump_sht(DRV_NAME, &opti_sht); + ata_dump_ops(DRV_NAME, &opti_port_ops); + } return pci_register_driver(&opti_pci_driver); } Index: work/drivers/ata/pata_optidma.c =================================================================== --- work.orig/drivers/ata/pata_optidma.c +++ work/drivers/ata/pata_optidma.c @@ -469,6 +469,11 @@ static struct pci_driver optidma_pci_dri static int __init optidma_init(void) { + { + ata_dump_sht(DRV_NAME, &optidma_sht); + ata_dump_ops(DRV_NAME, &optidma_port_ops); + ata_dump_ops(DRV_NAME, &optiplus_port_ops); + } return pci_register_driver(&optidma_pci_driver); } Index: work/drivers/ata/pata_pcmcia.c =================================================================== --- work.orig/drivers/ata/pata_pcmcia.c +++ work/drivers/ata/pata_pcmcia.c @@ -449,6 +449,11 @@ static struct pcmcia_driver pcmcia_drive static int __init pcmcia_init(void) { + { + ata_dump_sht(DRV_NAME, &pcmcia_sht); + ata_dump_ops(DRV_NAME, &pcmcia_port_ops); + ata_dump_ops(DRV_NAME, &pcmcia_8bit_port_ops); + } return pcmcia_register_driver(&pcmcia_driver); } Index: work/drivers/ata/pata_pdc2027x.c =================================================================== --- work.orig/drivers/ata/pata_pdc2027x.c +++ work/drivers/ata/pata_pdc2027x.c @@ -783,6 +783,11 @@ static int __devinit pdc2027x_init_one(s */ static int __init pdc2027x_init(void) { + { + ata_dump_sht(DRV_NAME, &pdc2027x_sht); + ata_dump_ops(DRV_NAME, &pdc2027x_pata100_ops); + ata_dump_ops(DRV_NAME, &pdc2027x_pata133_ops); + } return pci_register_driver(&pdc2027x_pci_driver); } Index: work/drivers/ata/pata_pdc202xx_old.c =================================================================== --- work.orig/drivers/ata/pata_pdc202xx_old.c +++ work/drivers/ata/pata_pdc202xx_old.c @@ -353,6 +353,11 @@ static struct pci_driver pdc202xx_pci_dr static int __init pdc202xx_init(void) { + { + ata_dump_sht(DRV_NAME, &pdc202xx_sht); + ata_dump_ops(DRV_NAME, &pdc2024x_port_ops); + ata_dump_ops(DRV_NAME, &pdc2026x_port_ops); + } return pci_register_driver(&pdc202xx_pci_driver); } Index: work/drivers/ata/pata_platform.c =================================================================== --- work.orig/drivers/ata/pata_platform.c +++ work/drivers/ata/pata_platform.c @@ -233,6 +233,10 @@ static struct platform_driver pata_platf static int __init pata_platform_init(void) { + { + ata_dump_sht(DRV_NAME, &pata_platform_sht); + ata_dump_ops(DRV_NAME, &pata_platform_port_ops); + } return platform_driver_register(&pata_platform_driver); } Index: work/drivers/ata/pata_qdi.c =================================================================== --- work.orig/drivers/ata/pata_qdi.c +++ work/drivers/ata/pata_qdi.c @@ -337,6 +337,11 @@ static __init int qdi_init(void) } if (ct != 0) return 0; + { + ata_dump_sht(DRV_NAME, &qdi_sht); + ata_dump_ops(DRV_NAME, &qdi6500_port_ops); + ata_dump_ops(DRV_NAME, &qdi6580_port_ops); + } return -ENODEV; } Index: work/drivers/ata/pata_radisys.c =================================================================== --- work.orig/drivers/ata/pata_radisys.c +++ work/drivers/ata/pata_radisys.c @@ -251,6 +251,10 @@ static struct pci_driver radisys_pci_dri static int __init radisys_init(void) { + { + ata_dump_sht(DRV_NAME, &radisys_sht); + ata_dump_ops(DRV_NAME, &radisys_pata_ops); + } return pci_register_driver(&radisys_pci_driver); } Index: work/drivers/ata/pata_rz1000.c =================================================================== --- work.orig/drivers/ata/pata_rz1000.c +++ work/drivers/ata/pata_rz1000.c @@ -138,6 +138,10 @@ static struct pci_driver rz1000_pci_driv static int __init rz1000_init(void) { + { + ata_dump_sht(DRV_NAME, &rz1000_sht); + ata_dump_ops(DRV_NAME, &rz1000_port_ops); + } return pci_register_driver(&rz1000_pci_driver); } Index: work/drivers/ata/pata_sc1200.c =================================================================== --- work.orig/drivers/ata/pata_sc1200.c +++ work/drivers/ata/pata_sc1200.c @@ -236,6 +236,10 @@ static struct pci_driver sc1200_pci_driv static int __init sc1200_init(void) { + { + ata_dump_sht(DRV_NAME, &sc1200_sht); + ata_dump_ops(DRV_NAME, &sc1200_port_ops); + } return pci_register_driver(&sc1200_pci_driver); } Index: work/drivers/ata/pata_scc.c =================================================================== --- work.orig/drivers/ata/pata_scc.c +++ work/drivers/ata/pata_scc.c @@ -1174,6 +1174,10 @@ static int __init scc_init (void) return rc; DPRINTK("done\n"); + { + ata_dump_sht(DRV_NAME, &scc_sht); + ata_dump_ops(DRV_NAME, &scc_pata_ops); + } return 0; } Index: work/drivers/ata/pata_serverworks.c =================================================================== --- work.orig/drivers/ata/pata_serverworks.c +++ work/drivers/ata/pata_serverworks.c @@ -525,6 +525,11 @@ static struct pci_driver serverworks_pci static int __init serverworks_init(void) { + { + ata_dump_sht(DRV_NAME, &serverworks_sht); + ata_dump_ops(DRV_NAME, &serverworks_osb4_port_ops); + ata_dump_ops(DRV_NAME, &serverworks_csb_port_ops); + } return pci_register_driver(&serverworks_pci_driver); } Index: work/drivers/ata/pata_sil680.c =================================================================== --- work.orig/drivers/ata/pata_sil680.c +++ work/drivers/ata/pata_sil680.c @@ -397,6 +397,10 @@ static struct pci_driver sil680_pci_driv static int __init sil680_init(void) { + { + ata_dump_sht(DRV_NAME, &sil680_sht); + ata_dump_ops(DRV_NAME, &sil680_port_ops); + } return pci_register_driver(&sil680_pci_driver); } Index: work/drivers/ata/pata_sis.c =================================================================== --- work.orig/drivers/ata/pata_sis.c +++ work/drivers/ata/pata_sis.c @@ -868,6 +868,16 @@ static struct pci_driver sis_pci_driver static int __init sis_init(void) { + { + ata_dump_sht(DRV_NAME, &sis_sht); + ata_dump_ops(DRV_NAME, &sis_133_for_sata_ops); + ata_dump_ops(DRV_NAME, &sis_base_ops); + ata_dump_ops(DRV_NAME, &sis_133_ops); + ata_dump_ops(DRV_NAME, &sis_133_early_ops); + ata_dump_ops(DRV_NAME, &sis_100_ops); + ata_dump_ops(DRV_NAME, &sis_66_ops); + ata_dump_ops(DRV_NAME, &sis_old_ops); + } return pci_register_driver(&sis_pci_driver); } Index: work/drivers/ata/pata_sl82c105.c =================================================================== --- work.orig/drivers/ata/pata_sl82c105.c +++ work/drivers/ata/pata_sl82c105.c @@ -314,6 +314,10 @@ static struct pci_driver sl82c105_pci_dr static int __init sl82c105_init(void) { + { + ata_dump_sht(DRV_NAME, &sl82c105_sht); + ata_dump_ops(DRV_NAME, &sl82c105_port_ops); + } return pci_register_driver(&sl82c105_pci_driver); } Index: work/drivers/ata/pata_triflex.c =================================================================== --- work.orig/drivers/ata/pata_triflex.c +++ work/drivers/ata/pata_triflex.c @@ -229,6 +229,10 @@ static struct pci_driver triflex_pci_dri static int __init triflex_init(void) { + { + ata_dump_sht(DRV_NAME, &triflex_sht); + ata_dump_ops(DRV_NAME, &triflex_port_ops); + } return pci_register_driver(&triflex_pci_driver); } Index: work/drivers/ata/pata_via.c =================================================================== --- work.orig/drivers/ata/pata_via.c +++ work/drivers/ata/pata_via.c @@ -596,6 +596,11 @@ static struct pci_driver via_pci_driver static int __init via_init(void) { + { + ata_dump_sht(DRV_NAME, &via_sht); + ata_dump_ops(DRV_NAME, &via_port_ops); + ata_dump_ops(DRV_NAME, &via_port_ops_noirq); + } return pci_register_driver(&via_pci_driver); } Index: work/drivers/ata/pata_winbond.c =================================================================== --- work.orig/drivers/ata/pata_winbond.c +++ work/drivers/ata/pata_winbond.c @@ -256,6 +256,10 @@ static __init int winbond_init(void) } if (ct != 0) return 0; + { + ata_dump_sht(DRV_NAME, &winbond_sht); + ata_dump_ops(DRV_NAME, &winbond_port_ops); + } return -ENODEV; } Index: work/drivers/ata/pdc_adma.c =================================================================== --- work.orig/drivers/ata/pdc_adma.c +++ work/drivers/ata/pdc_adma.c @@ -714,6 +714,10 @@ static int adma_ata_init_one(struct pci_ static int __init adma_ata_init(void) { + { + ata_dump_sht(DRV_NAME, &adma_ata_sht); + ata_dump_ops(DRV_NAME, &adma_ata_ops); + } return pci_register_driver(&adma_ata_pci_driver); } Index: work/drivers/ata/sata_fsl.c =================================================================== --- work.orig/drivers/ata/sata_fsl.c +++ work/drivers/ata/sata_fsl.c @@ -1360,6 +1360,10 @@ static struct of_platform_driver fsl_sat static int __init sata_fsl_init(void) { of_register_platform_driver(&fsl_sata_driver); + { + ata_dump_sht(DRV_NAME, &sata_fsl_sht); + ata_dump_ops(DRV_NAME, &sata_fsl_ops); + } return 0; } Index: work/drivers/ata/sata_inic162x.c =================================================================== --- work.orig/drivers/ata/sata_inic162x.c +++ work/drivers/ata/sata_inic162x.c @@ -731,6 +731,10 @@ static struct pci_driver inic_pci_driver static int __init inic_init(void) { + { + ata_dump_sht(DRV_NAME, &inic_sht); + ata_dump_ops(DRV_NAME, &inic_port_ops); + } return pci_register_driver(&inic_pci_driver); } Index: work/drivers/ata/sata_mv.c =================================================================== --- work.orig/drivers/ata/sata_mv.c +++ work/drivers/ata/sata_mv.c @@ -2677,6 +2677,13 @@ static int mv_init_one(struct pci_dev *p static int __init mv_init(void) { + { + ata_dump_sht(DRV_NAME, &mv5_sht); + ata_dump_sht(DRV_NAME, &mv6_sht); + ata_dump_ops(DRV_NAME, &mv5_ops); + ata_dump_ops(DRV_NAME, &mv6_ops); + ata_dump_ops(DRV_NAME, &mv_iie_ops); + } return pci_register_driver(&mv_pci_driver); } Index: work/drivers/ata/sata_nv.c =================================================================== --- work.orig/drivers/ata/sata_nv.c +++ work/drivers/ata/sata_nv.c @@ -2416,6 +2416,16 @@ static void nv_adma_host_stop(struct ata static int __init nv_init(void) { + { + ata_dump_sht(DRV_NAME, &nv_sht); + ata_dump_sht(DRV_NAME, &nv_adma_sht); + ata_dump_sht(DRV_NAME, &nv_swncq_sht); + ata_dump_ops(DRV_NAME, &nv_generic_ops); + ata_dump_ops(DRV_NAME, &nv_nf2_ops); + ata_dump_ops(DRV_NAME, &nv_ck804_ops); + ata_dump_ops(DRV_NAME, &nv_adma_ops); + ata_dump_ops(DRV_NAME, &nv_swncq_ops); + } return pci_register_driver(&nv_pci_driver); } Index: work/drivers/ata/sata_promise.c =================================================================== --- work.orig/drivers/ata/sata_promise.c +++ work/drivers/ata/sata_promise.c @@ -1060,6 +1060,13 @@ static int pdc_ata_init_one(struct pci_d static int __init pdc_ata_init(void) { + { + ata_dump_sht(DRV_NAME, &pdc_ata_sht); + ata_dump_ops(DRV_NAME, &pdc_common_ops); + ata_dump_ops(DRV_NAME, &pdc_sata_ops); + ata_dump_ops(DRV_NAME, &pdc_old_sata_ops); + ata_dump_ops(DRV_NAME, &pdc_pata_ops); + } return pci_register_driver(&pdc_ata_pci_driver); } Index: work/drivers/ata/sata_qstor.c =================================================================== --- work.orig/drivers/ata/sata_qstor.c +++ work/drivers/ata/sata_qstor.c @@ -663,6 +663,10 @@ static int qs_ata_init_one(struct pci_de static int __init qs_ata_init(void) { + { + ata_dump_sht(DRV_NAME, &qs_ata_sht); + ata_dump_ops(DRV_NAME, &qs_ata_ops); + } return pci_register_driver(&qs_ata_pci_driver); } Index: work/drivers/ata/sata_sil.c =================================================================== --- work.orig/drivers/ata/sata_sil.c +++ work/drivers/ata/sata_sil.c @@ -688,6 +688,10 @@ static int sil_pci_device_resume(struct static int __init sil_init(void) { + { + ata_dump_sht(DRV_NAME, &sil_sht); + ata_dump_ops(DRV_NAME, &sil_ops); + } return pci_register_driver(&sil_pci_driver); } Index: work/drivers/ata/sata_sil24.c =================================================================== --- work.orig/drivers/ata/sata_sil24.c +++ work/drivers/ata/sata_sil24.c @@ -1394,6 +1394,10 @@ static int sil24_port_resume(struct ata_ static int __init sil24_init(void) { + { + ata_dump_sht(DRV_NAME, &sil24_sht); + ata_dump_ops(DRV_NAME, &sil24_ops); + } return pci_register_driver(&sil24_pci_driver); } Index: work/drivers/ata/sata_sis.c =================================================================== --- work.orig/drivers/ata/sata_sis.c +++ work/drivers/ata/sata_sis.c @@ -333,6 +333,10 @@ static int sis_init_one(struct pci_dev * static int __init sis_init(void) { + { + ata_dump_sht(DRV_NAME, &sis_sht); + ata_dump_ops(DRV_NAME, &sis_ops); + } return pci_register_driver(&sis_pci_driver); } Index: work/drivers/ata/sata_svw.c =================================================================== --- work.orig/drivers/ata/sata_svw.c +++ work/drivers/ata/sata_svw.c @@ -474,6 +474,10 @@ static struct pci_driver k2_sata_pci_dri static int __init k2_sata_init(void) { + { + ata_dump_sht(DRV_NAME, &k2_sata_sht); + ata_dump_ops(DRV_NAME, &k2_sata_ops); + } return pci_register_driver(&k2_sata_pci_driver); } Index: work/drivers/ata/sata_sx4.c =================================================================== --- work.orig/drivers/ata/sata_sx4.c +++ work/drivers/ata/sata_sx4.c @@ -1433,6 +1433,10 @@ static int pdc_sata_init_one(struct pci_ static int __init pdc_sata_init(void) { + { + ata_dump_sht(DRV_NAME, &pdc_sata_sht); + ata_dump_ops(DRV_NAME, &pdc_20621_ops); + } return pci_register_driver(&pdc_sata_pci_driver); } Index: work/drivers/ata/sata_uli.c =================================================================== --- work.orig/drivers/ata/sata_uli.c +++ work/drivers/ata/sata_uli.c @@ -248,6 +248,10 @@ static int uli_init_one(struct pci_dev * static int __init uli_init(void) { + { + ata_dump_sht(DRV_NAME, &uli_sht); + ata_dump_ops(DRV_NAME, &uli_ops); + } return pci_register_driver(&uli_pci_driver); } Index: work/drivers/ata/sata_via.c =================================================================== --- work.orig/drivers/ata/sata_via.c +++ work/drivers/ata/sata_via.c @@ -462,6 +462,12 @@ static int svia_init_one(struct pci_dev static int __init svia_init(void) { + { + ata_dump_sht(DRV_NAME, &svia_sht); + ata_dump_ops(DRV_NAME, &vt6420_sata_ops); + ata_dump_ops(DRV_NAME, &vt6421_pata_ops); + ata_dump_ops(DRV_NAME, &vt6421_sata_ops); + } return pci_register_driver(&svia_pci_driver); } Index: work/drivers/ata/sata_vsc.c =================================================================== --- work.orig/drivers/ata/sata_vsc.c +++ work/drivers/ata/sata_vsc.c @@ -443,6 +443,10 @@ static struct pci_driver vsc_sata_pci_dr static int __init vsc_sata_init(void) { + { + ata_dump_sht(DRV_NAME, &vsc_sata_sht); + ata_dump_ops(DRV_NAME, &vsc_sata_ops); + } return pci_register_driver(&vsc_sata_pci_driver); } Index: work/drivers/ata/libata-core.c =================================================================== --- work.orig/drivers/ata/libata-core.c +++ work/drivers/ata/libata-core.c @@ -7768,3 +7768,55 @@ EXPORT_SYMBOL_GPL(ata_cable_80wire); EXPORT_SYMBOL_GPL(ata_cable_unknown); EXPORT_SYMBOL_GPL(ata_cable_ignore); EXPORT_SYMBOL_GPL(ata_cable_sata); + +#include + +void ata_dump_sht(const char *drv_name, const struct scsi_host_template *sht) +{ + const int begin_off = offsetof(struct scsi_host_template, detect); + const int end_off = offsetof(struct scsi_host_template, eh_timed_out) + sizeof(void *); + char symname[KSYM_NAME_LEN]; + void **pp; + + if (lookup_symbol_name((unsigned long)sht, symname)) + snprintf(symname, KSYM_NAME_LEN, "%p", sht); + printk("SHT %s %s: %s", drv_name, symname, sht->name); + + for (pp = (void *)sht + begin_off; pp < (void **)((void *)sht + end_off); pp++) { + if (lookup_symbol_name((unsigned long)*pp, symname)) + snprintf(symname, KSYM_NAME_LEN, "%p", *pp); + printk(" <%s>", symname); + } + + printk(" %s %d %d %u %u %lu %d %u %u %u %u %u %u %u %u %u\n", + sht->proc_name, sht->can_queue, sht->this_id, + sht->sg_tablesize, sht->max_sectors, sht->dma_boundary, + sht->cmd_per_lun, sht->present, sht->supported_mode, + sht->unchecked_isa_dma, sht->use_clustering, sht->emulated, + sht->skip_settle_delay, sht->ordered_tag, sht->use_sg_chaining, + sht->max_host_blocked); +} +EXPORT_SYMBOL_GPL(ata_dump_sht); + +void ata_dump_ops(const char *drv_name, const struct ata_port_operations *ops) +{ + const int begin_off = 0; + const int end_off = offsetof(struct ata_port_operations, eng_timeout) + sizeof(void *); + struct ata_port_operations my_ops = *ops; + char symname[KSYM_NAME_LEN]; + void **pp; + + if (lookup_symbol_name((unsigned long)ops, symname)) + snprintf(symname, KSYM_NAME_LEN, "%p", ops); + printk("OPS %s %s:", drv_name, symname); + + ata_finalize_port_ops(&my_ops); + + for (pp = (void *)&my_ops + begin_off; pp < (void **)((void *)&my_ops + end_off); pp++) { + if (lookup_symbol_name((unsigned long)*pp, symname)) + snprintf(symname, KSYM_NAME_LEN, "%p", *pp); + printk(" <%s>", symname); + } + printk("\n"); +} +EXPORT_SYMBOL_GPL(ata_dump_ops); Index: work/include/linux/libata.h =================================================================== --- work.orig/include/linux/libata.h +++ work/include/linux/libata.h @@ -803,6 +803,9 @@ static inline int ata_port_is_dummy(stru return ap->ops == &ata_dummy_port_ops; } +extern void ata_dump_sht(const char *drv_name, const struct scsi_host_template *sht); +extern void ata_dump_ops(const char *drv_name, const struct ata_port_operations *ops); + extern void sata_print_link_status(struct ata_link *link); extern void ata_port_probe(struct ata_port *); extern void ata_bus_reset(struct ata_port *ap); Index: work/kernel/kallsyms.c =================================================================== --- work.orig/kernel/kallsyms.c +++ work/kernel/kallsyms.c @@ -291,6 +291,7 @@ int lookup_symbol_name(unsigned long add /* see if it's in a module */ return lookup_module_symbol_name(addr, symname); } +EXPORT_SYMBOL_GPL(lookup_symbol_name); int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name)