Hi, This patch will break series 6 controllers (pm8001, pm8081). The new series 7 controllers (8008/9/18/19) have a different mechanism of obtaining phy counters where you can use IOMB command. This can be achieved by sending "GET_PHY_PROFILE" command with page code value set to either 0x1 or 0x2. You can add support for this on pm80xx_hwi.c I am attaching the page from series 7 spec fo your reference. Regards Anand > >> -------- Original Message -------- > >> Subject: [PATCH] [scsi] pm8001 : fix panic when cat > >> /sys/class/sas_phy/phy-8:0/running_disparity_error_count > >> Date: Wed, 9 Oct 2013 17:46:26 +0800 > >> From: XinHong Zhu <zxh3737@xxxxxxx <mailto:zxh3737@xxxxxxx>> > >> To: linux-scsi@xxxxxxxxxxxxxxx <mailto:linux-scsi@xxxxxxxxxxxxxxx> > >> CC: jack_wang@xxxxxxxxx <mailto:jack_wang@xxxxxxxxx>, XinHong Zhu > >> <zxh3737@xxxxxxx <mailto:zxh3737@xxxxxxx>> > >> > >> There are only two bar memeory got ioremap ,when triggering > >> pm8001_phy_control got the following Oops > >> BUG: unable to handle kernel paging request at 0000000000001034 > >> IP: [<ffffffffa02b9366>] pm8001_phy_control+0x1e6/0x2a0 [pm80xx] PGD > >> 16bf1f067 PUD 231368067 PMD 0 > >> Oops: 0000 [#1] SMP > >> last sysfs file: > >> /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/host8/phy-8:0/sas_p > >> h y/phy-8:0/running_disparity_error_count > >> CPU 0 > >> Modules linked in: pm80xx(U) libsas scsi_transport_sas ses enclosure > >> ipv6 sg iTCO_wdt iTCO_vendor_support e1000e i2c_i801 ext4 mbcache > >> jbd2 sd_mod crc_t10dif pata_acpi ata_generic ata_piix i915 > >> drm_kms_helper drm i2c_algo_bit i2c_core video output dm_mirror > >> dm_region_hash dm_log dm_mod [last unloaded: pmspclx] > >> > >> Pid: 9292, comm: cat Not tainted 2.6.32-358.el6.x86_64 #1 Sugon > >> Perry/Perry > >> RIP: 0010:[<ffffffffa02b9366>] [<ffffffffa02b9366>] > >> pm8001_phy_control+0x1e6/0x2a0 [pm80xx] > >> RSP: 0018:ffff88017d7b1db8 EFLAGS: 00010002 > >> RAX: ffff880236ea6800 RBX: ffff88017d368000 RCX: 00000000000007d8 > >> RDX: 0000000000000246 RSI: 0000000000000012 RDI: ffff88017d368038 > >> RBP: ffff88017d7b1e08 R08: ffffffff8164ec40 R09: ffff88023a3aec38 > >> R10: 0000000000000001 R11: 0000000000000246 R12: ffff88017d368518 > >> R13: 0000000000001034 R14: ffff88017d368038 R15: 0000000000000246 > >> FS: 00007fd9365a5700(0000) GS:ffff88002c200000(0000) > >> knlGS:0000000000000000 > >> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > >> CR2: 0000000000001034 CR3: 00000001795b9000 CR4: 00000000000407f0 > >> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > >> DR3: 0000000000000000 DR6: 00000000ffff4ff0 DR7: 0000000000000400 > >> Process cat (pid: 9292, threadinfo ffff88017d7b0000, task > >> ffff880237e66080) > >> Stack: > >> 0000001000000000 0000000000000000 ffff88017d7b1dc8 ffff88017d7b1dc8 > >> <d> > >> ffff880236ebc140 ffff880236dbc000 ffff880236ea6800 ffff880236ea6800 > >> 0000000000008000 0000000001f1b000 ffff88017d7b1e28 ffffffffa029b027 > >> Call Trace: > >> [<ffffffffa029b027>] sas_get_linkerrors+0x97/0xa0 [libsas] > >> [<ffffffffa01585a8>] > >> show_sas_phy_running_disparity_error_count+0x58/0xa0 > >> [scsi_transport_sas] [<ffffffff8135acb7>] dev_attr_show+0x27/0x50 > >> [<ffffffff81129c5e>] ? __get_free_pages+0xe/0x50 > >> [<ffffffff811f9981>] > >> sysfs_read_file+0x111/0x1f0 [<ffffffff811816c5>] vfs_read+0xb5/0x1a0 > >> [<ffffffff81181801>] sys_read+0x51/0x90 [<ffffffff8100b072>] > >> system_call_fastpath+0x16/0x1b > >> Code: 00 83 f8 ff 0f 84 bd 00 00 00 49 c1 e5 0e 49 8b 84 24 48 02 00 > >> 00 > >> 41 81 e5 00 c0 00 00 49 81 c5 34 10 00 00 4c 03 ab 80 00 00 00 <41> > >> 8b > >> 55 00 89 90 5c 02 00 00 41 8b 55 04 89 90 60 02 00 00 41 RIP > >> [<ffffffffa02b9366>] pm8001_phy_control+0x1e6/0x2a0 [pm80xx] RSP > >> <ffff88017d7b1db8> > >> CR2: 0000000000001034 > >> > >> pm8008 pci bar 0 and 1 form io memory 0,bar 2 and 3 form io memory 1 > >> > >> Signed-off-by : XinHong Zhu <zxh3737@xxxxxxx > >> <mailto:zxh3737@xxxxxxx>> > >> --- > >> drivers/scsi/pm8001/pm8001_sas.c | 2 +- > >> 1 files changed, 1 insertions(+), 1 deletions(-) > >> > >> diff --git a/drivers/scsi/pm8001/pm8001_sas.c > >> b/drivers/scsi/pm8001/pm8001_sas.c > >> index a85d73d..431b531 100644 > >> --- a/drivers/scsi/pm8001/pm8001_sas.c > >> +++ b/drivers/scsi/pm8001/pm8001_sas.c > >> @@ -222,7 +222,7 @@ int pm8001_phy_control(struct asd_sas_phy > >> *sas_phy, enum phy_func func, > >> { > >> struct sas_phy *phy = sas_phy->phy; > >> uint32_t *qp = (uint32_t *)(((char *) > >> - pm8001_ha->io_mem[2].memvirtaddr) > >> + pm8001_ha->io_mem[1].memvirtaddr) > >> + 0x1034 + (0x4000 * (phy_id & 3))); > >> > >> phy->invalid_dword_count = qp[0]; > >> -- > >> 1.7.9 > >> > >> > >> -- > >> To unsubscribe from this list: send the line "unsubscribe linux-scsi" > >> in the body of a message to majordomo@xxxxxxxxxxxxxxx > >> <mailto:majordomo@xxxxxxxxxxxxxxx> > >> More majordomo info at http://vger.kernel.org/majordomo-info.html > >> > >> > >> > > > >
Attachment:
phy_counters.docx
Description: application/vnd.openxmlformats-officedocument.wordprocessingml.document