From: Larry Kessler <kessler@us.ibm.com>
To: linux-kernel mailing list <linux-kernel@vger.kernel.org>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
"Andrew V. Savochkin" <saw@saw.sw.com.sg>,
cgl_discussion mailing list <cgl_discussion@osdl.org>,
evlog mailing list <evlog-developers@lists.sourceforge.net>,
"ipslinux (Keith Mitchell)" <ipslinux@us.ibm.com>,
Linus Torvalds <torvalds@home.transmeta.com>,
Rusty Russell <rusty@rustcorp.com.au>,
evlog mailing list <evlog-developers@lists.sourceforge.net>
Subject: [PATCH-RFC] 4 of 4 - New problem logging macros, SCSI RAID device driver
Date: Mon, 23 Sep 2002 18:54:04 -0700 [thread overview]
Message-ID: <3D8FC5BC.51A8FCCF@us.ibm.com> (raw)
Please see [PATCH-RFC] README 1st note.
Also note that this patch includes pci_problem.h, as does the eepro100.c
device driver patch included in the 'README 1st' note.
Summary of this patch...
drivers/scsi/ips.c
Device Driver for the IBM ServeRAID controller, with use of new
macros replacing prink() for error conditions.
include/linux/scsi_problem.h
- scsi_host_detail() macro providing common information of interest
for scsi-class devices.
- scsi_host_problem and scsi_host_introduce macros
include/linux/pci_problem.h
- pci_detail() macro providing common information on a per class
basis when problems are being reported for devices of that class.
- pci_problem and pci_introduce macros
--- linux-2.5.37/drivers/scsi/ips.c Fri Sep 20 10:20:13 2002
+++ linux-2.5.37-net/drivers/scsi/ips.c Mon Sep 23 19:54:30 2002
@@ -176,6 +176,7 @@
#include "scsi.h"
#include "hosts.h"
#include "ips.h"
+#include "scsi_problem.h"
#include <linux/module.h>
@@ -694,7 +695,7 @@
ips_FlashData = ( char * ) __get_free_pages( GFP_KERNEL, 7 );
if (ips_FlashData == NULL) {
/* The validity of this pointer is checked in ips_make_passthru() before it is used */
- printk( KERN_WARNING "ERROR: Can't Allocate Large Buffer for Flashing\n" );
+ problem( LOG_WARNING, "ERROR: Can't Allocate Large Buffer for Flashing\n" );
}
}
@@ -779,6 +780,9 @@
#endif
if (ips_num_controllers > 0)
register_reboot_notifier(&ips_notifier);
+ else
+ problem(LOG_INFO, "Unable to detect any ips controllers\n",
+ detail(ips_num_controllers, "%d", ips_num_controllers));
return (ips_num_controllers);
#endif
@@ -861,8 +865,11 @@
#if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,0)
if (check_mem_region(mem_addr, mem_len)) {
/* Couldn't allocate io space */
- printk(KERN_WARNING "(%s%d) couldn't allocate IO space %x len %d.\n",
- ips_name, ips_next_controller, io_addr, io_len);
+ pci_problem(LOG_WARNING, dev[i], "check_mem_region failed. Couldn't allocate IO space\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller),
+ detail(io_addr, "%x", io_addr),
+ detail(io_len, "%d", io_len));
ips_next_controller++;
@@ -889,8 +896,11 @@
if (check_region(io_addr, io_len)) {
/* Couldn't allocate io space */
- printk(KERN_WARNING "(%s%d) couldn't allocate IO space %x len %d.\n",
- ips_name, ips_next_controller, io_addr, io_len);
+ pci_problem(LOG_WARNING, dev[i], "check_region failed. Couldn't allocate IO space\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller),
+ detail(io_addr, "%x", io_addr),
+ detail(io_len, "%d", io_len));
ips_next_controller++;
@@ -902,8 +912,9 @@
/* get planer status */
if (pci_read_config_word(dev[i], 0x04, &planer)) {
- printk(KERN_WARNING "(%s%d) can't get planer status.\n",
- ips_name, ips_next_controller);
+ pci_problem(LOG_WARNING, dev[i], "Can't get planer status.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ips_next_controller++;
@@ -926,8 +937,9 @@
/* get the revision ID */
if (pci_read_config_byte(dev[i], PCI_REVISION_ID, &revision_id)) {
- printk(KERN_WARNING "(%s%d) can't get revision id.\n",
- ips_name, ips_next_controller);
+ pci_problem(LOG_WARNING, dev[i], "Can't get revision id.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ips_next_controller++;
@@ -937,8 +949,9 @@
#if LINUX_VERSION_CODE < LinuxVersionCode(2,4,0)
/* get the subdevice id */
if (pci_read_config_word(dev[i], PCI_SUBSYSTEM_ID, &subdevice_id)) {
- printk(KERN_WARNING "(%s%d) can't get subdevice id.\n",
- ips_name, ips_next_controller);
+ pci_problem(LOG_WARNING, dev[i], "Can't get subdevice id.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ips_next_controller++;
@@ -952,13 +965,17 @@
sh = scsi_register(SHT, sizeof(ips_ha_t));
if (sh == NULL) {
- printk(KERN_WARNING "(%s%d) Unable to register controller with SCSI subsystem - skipping controller\n",
- ips_name, ips_next_controller);
+ pci_problem(LOG_WARNING, dev[i], "Unable to register controller with the SCSI subsystem - skipping controller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ips_next_controller++;
continue;
}
+ scsi_host_introduce(sh, "controller",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha = IPS_HA(sh);
memset(ha, 0, sizeof(ips_ha_t));
@@ -979,8 +996,9 @@
ha->enq = kmalloc(sizeof(IPS_ENQ), GFP_KERNEL);
if (!ha->enq) {
- printk(KERN_WARNING "(%s%d) Unable to allocate host inquiry structure - skipping contoller\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host inquiry structure - skipping contoller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->active = 0;
ips_free(ha);
@@ -996,8 +1014,9 @@
ha->adapt = kmalloc(sizeof(IPS_ADAPTER), GFP_KERNEL);
if (!ha->adapt) {
- printk(KERN_WARNING "(%s%d) Unable to allocate host adapt structure - skipping controller\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host adapt structure - skipping controller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->active = 0;
ips_free(ha);
@@ -1013,8 +1032,9 @@
ha->conf = kmalloc(sizeof(IPS_CONF), GFP_KERNEL);
if (!ha->conf) {
- printk(KERN_WARNING "(%s%d) Unable to allocate host conf structure - skipping controller\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host conf structure - skipping controller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->active = 0;
ips_free(ha);
@@ -1030,8 +1050,9 @@
ha->nvram = kmalloc(sizeof(IPS_NVRAM_P5), GFP_KERNEL);
if (!ha->nvram) {
- printk(KERN_WARNING "(%s%d) Unable to allocate host nvram structure - skipping controller\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host nvram structure - skipping controller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->active = 0;
ips_free(ha);
@@ -1047,8 +1068,9 @@
ha->subsys = kmalloc(sizeof(IPS_SUBSYS), GFP_KERNEL);
if (!ha->subsys) {
- printk(KERN_WARNING "(%s%d) Unable to allocate host subsystem structure - skipping controller\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host subsystem structure - skipping controller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->active = 0;
ips_free(ha);
@@ -1064,8 +1086,9 @@
ha->dummy = kmalloc(sizeof(IPS_IO_CMD), GFP_KERNEL);
if (!ha->dummy) {
- printk(KERN_WARNING "(%s%d) Unable to allocate host dummy structure - skipping controller\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host dummy structure - skipping controller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->active = 0;
ips_free(ha);
@@ -1086,8 +1109,9 @@
ha->ioctl_datasize = count;
if (!ha->ioctl_data) {
- printk(KERN_WARNING "(%s%d) Unable to allocate ioctl data\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate ioctl data\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->ioctl_data = NULL;
ha->ioctl_order = 0;
@@ -1189,8 +1213,9 @@
/*
* Initialization failed
*/
- printk(KERN_WARNING "(%s%d) unable to initialize controller - skipping controller\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Initialization of controller failed - skipping controller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->active = 0;
ips_free(ha);
@@ -1206,8 +1231,9 @@
/* install the interrupt handler */
if (request_irq(irq, do_ipsintr, SA_SHIRQ, ips_name, ha)) {
- printk(KERN_WARNING "(%s%d) unable to install interrupt handler - skipping controller\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Unable to install interrupt handler - skipping controller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->active = 0;
ips_free(ha);
@@ -1226,8 +1252,9 @@
ha->max_cmds = 1;
if (!ips_allocatescbs(ha)) {
/* couldn't allocate a temp SCB */
- printk(KERN_WARNING "(%s%d) unable to allocate CCBs - skipping contoller\n",
- ips_name, ips_next_controller);
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate CCBs - skipping contoller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ips_next_controller));
ha->active = 0;
ips_free(ha);
@@ -1252,7 +1279,9 @@
for (i = 0; i < ips_next_controller; i++) {
if (ips_ha[i] == 0) {
- printk(KERN_WARNING "(%s%d) ignoring bad controller\n", ips_name, i);
+ problem(LOG_WARNING, "Ignoring bad controller\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_index, "%d", i));
continue;
}
@@ -1293,8 +1322,8 @@
for (i = 0; i < IPS_MAX_ADAPTERS && ips_sh[i] != sh; i++);
if (i == IPS_MAX_ADAPTERS) {
- printk(KERN_WARNING "(%s) release, invalid Scsi_Host pointer.\n",
- ips_name);
+ problem(LOG_WARNING, "release fails, invalid Scsi_Host pointer.\n",
+ detail(ips_name, "%s", ips_name));
#if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,0)
BUG();
#endif
@@ -1326,7 +1355,9 @@
/* send command */
if (ips_send_wait(ha, scb, ips_cmd_timeout, IPS_INTR_ON) == IPS_FAILURE)
- printk(KERN_NOTICE "(%s%d) Incomplete Flush.\n", ips_name, ha->host_num);
+ scsi_host_problem(LOG_NOTICE, sh, "Incomplete Flush during release.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
printk(KERN_NOTICE "(%s%d) Flushing Complete.\n", ips_name, ha->host_num);
@@ -1402,7 +1433,9 @@
/* send command */
if (ips_send_wait(ha, scb, ips_cmd_timeout, IPS_INTR_ON) == IPS_FAILURE)
- printk(KERN_NOTICE "(%s%d) Incomplete Flush.\n", ips_name, ha->host_num);
+ problem(LOG_NOTICE, "Incomplete Flush during halt.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
else
printk(KERN_NOTICE "(%s%d) Flushing Complete.\n", ips_name, ha->host_num);
}
@@ -1589,16 +1622,17 @@
* command must have already been sent
* reset the controller
*/
- printk(KERN_NOTICE "(%s%d) Resetting controller.\n",
- ips_name, ha->host_num);
+ scsi_host_problem(LOG_NOTICE, SC->host, "Resetting controller.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
ret = (*ha->func.reset)(ha);
if (!ret) {
Scsi_Cmnd *scsi_cmd;
- printk(KERN_NOTICE
- "(%s%d) Controller reset failed - controller now offline.\n",
- ips_name, ha->host_num);
+ scsi_host_problem(LOG_NOTICE, SC->host, "Controller reset has failed - controller now offline.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
/* Now fail all of the active commands */
DEBUG_VAR(1, "(%s%d) Failing active commands",
@@ -1628,9 +1662,10 @@
if (!ips_clear_adapter(ha, IPS_INTR_IORL)) {
Scsi_Cmnd *scsi_cmd;
- printk(KERN_NOTICE
- "(%s%d) Controller reset failed - controller now offline.\n",
- ips_name, ha->host_num);
+ scsi_host_problem(LOG_NOTICE, SC->host,
+ "Controller reset failed - controller now offline.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
/* Now fail all of the active commands */
DEBUG_VAR(1, "(%s%d) Failing active commands",
@@ -2106,9 +2141,9 @@
break;
if (cstatus.fields.command_id > (IPS_MAX_CMDS - 1)) {
- printk(KERN_WARNING "(%s%d) Spurious interrupt; no ccb.\n",
- ips_name, ha->host_num);
-
+ problem(LOG_WARNING, "Spurious interrupt; no ccb.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
continue;
}
@@ -2434,7 +2469,7 @@
if(pt->CoppCP.cmd.flashfw.count + ha->flash_datasize >
(PAGE_SIZE << ha->flash_order)){
ips_free_flash_copperhead(ha);
- printk(KERN_WARNING "failed size sanity check\n");
+ scsi_host_problem(LOG_WARNING, scb->scsi_cmd->host, "failed size sanity check\n");
return IPS_FAILURE;
}
}
@@ -3120,15 +3155,17 @@
ips_ffdc_reset(ha, IPS_INTR_IORL);
if (!ips_read_config(ha, IPS_INTR_IORL)) {
- printk(KERN_WARNING "(%s%d) unable to read config from controller.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "Unable to read config from controller.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return (0);
} /* end if */
if (!ips_read_adapter_status(ha, IPS_INTR_IORL)) {
- printk(KERN_WARNING "(%s%d) unable to read controller status.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "Unable to read controller status.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return (0);
}
@@ -3137,16 +3174,18 @@
ips_identify_controller(ha);
if (!ips_read_subsystem_parameters(ha, IPS_INTR_IORL)) {
- printk(KERN_WARNING "(%s%d) unable to read subsystem parameters.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "Unable to read subsystem parameters.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return (0);
}
/* write nvram user page 5 */
if (!ips_write_driver_status(ha, IPS_INTR_IORL)) {
- printk(KERN_WARNING "(%s%d) unable to write driver info to controller.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "Unable to write driver info to controller.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return (0);
}
@@ -4028,16 +4067,18 @@
METHOD_TRACE("ipsintr_done", 2);
if (!scb) {
- printk(KERN_WARNING "(%s%d) Spurious interrupt; scb NULL.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "Spurious interrupt; scb NULL.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return ;
}
if (scb->scsi_cmd == NULL) {
/* unexpected interrupt */
- printk(KERN_WARNING "(%s%d) Spurious interrupt; scsi_cmd not set.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "Spurious interrupt; scsi_cmd not set.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return;
}
@@ -5459,8 +5500,11 @@
}
if (PostByte[0] < IPS_GOOD_POST_STATUS) {
- printk(KERN_WARNING "(%s%d) reset controller fails (post status %x %x).\n",
- ips_name, ha->host_num, PostByte[0], PostByte[1]);
+ problem(LOG_WARNING, "Reset copperhead controller fails\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num),
+ detail(status1, "%x", PostByte[0]),
+ detail(status2, "%x", PostByte[1]));
return (0);
}
@@ -5551,8 +5595,11 @@
}
if (PostByte[0] < IPS_GOOD_POST_STATUS) {
- printk(KERN_WARNING "(%s%d) reset controller fails (post status %x %x).\n",
- ips_name, ha->host_num, PostByte[0], PostByte[1]);
+ problem(LOG_WARNING, "Reset copperhead_mmio controller fails\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num),
+ detail(status1, "%x", PostByte[0]),
+ detail(status2, "%x", PostByte[1]));
return (0);
}
@@ -5638,8 +5685,9 @@
if (i >= 45) {
/* error occurred */
- printk(KERN_WARNING "(%s%d) timeout waiting for post.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "Timeout waiting for post.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return (0);
}
@@ -5651,8 +5699,10 @@
writel(Isr, ha->mem_ptr + IPS_REG_I2O_HIR);
if (Post < (IPS_GOOD_POST_STATUS << 8)) {
- printk(KERN_WARNING "(%s%d) reset controller fails (post status %x).\n",
- ips_name, ha->host_num, Post);
+ problem(LOG_WARNING, "Reset morpheus controller fails.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num),
+ detail(post, "%x", Post));
return (0);
}
@@ -5670,8 +5720,9 @@
if (i >= 240) {
/* error occurred */
- printk(KERN_WARNING "(%s%d) timeout waiting for config.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "timeout waiting for config.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return (0);
}
@@ -6012,10 +6063,13 @@
if (!(val & IPS_BIT_START_STOP))
break;
- printk(KERN_WARNING "(%s%d) ips_issue val [0x%x].\n",
- ips_name, ha->host_num, val);
- printk(KERN_WARNING "(%s%d) ips_issue semaphore chk timeout.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "copperhead ips_issue val\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num),
+ detail(val, "%x", val));
+ problem(LOG_WARNING, "copperhead ips_issue semaphore chk timeout.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
IPS_HA_UNLOCK(cpu_flags);
@@ -6075,11 +6129,14 @@
if (!(val & IPS_BIT_START_STOP))
break;
- printk(KERN_WARNING "(%s%d) ips_issue val [0x%x].\n",
- ips_name, ha->host_num, val);
- printk(KERN_WARNING "(%s%d) ips_issue semaphore chk timeout.\n",
- ips_name, ha->host_num);
-
+ problem(LOG_WARNING, "copperhead_mmio ips_issue val\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num),
+ detail(val, "%x", val));
+ problem(LOG_WARNING, "copperhead_mmio ips_issue semaphore chk timeout.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
+
IPS_HA_UNLOCK(cpu_flags);
return (IPS_FAILURE);
@@ -6337,8 +6394,9 @@
METHOD_TRACE("ips_write_driver_status", 1);
if (!ips_readwrite_page5(ha, FALSE, intr)) {
- printk(KERN_WARNING "(%s%d) unable to read NVRAM page 5.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "Unable to read NVRAM page 5.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return (0);
}
@@ -6374,8 +6432,9 @@
/* now update the page */
if (!ips_readwrite_page5(ha, TRUE, intr)) {
- printk(KERN_WARNING "(%s%d) unable to write NVRAM page 5.\n",
- ips_name, ha->host_num);
+ problem(LOG_WARNING, "Unable to update NVRAM page 5.\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num));
return (0);
}
@@ -7321,16 +7380,22 @@
if (strncmp(FirmwareVersion, Compatable[ ha->nvram->adapter_type ], IPS_COMPAT_ID_LENGTH) != 0)
{
if (ips_cd_boot == 0)
- printk(KERN_WARNING "Warning: Adapter %d Firmware Compatible Version is %s, but should be %s\n",
- ha->host_num, FirmwareVersion, Compatable[ ha->nvram->adapter_type ]);
+ problem(LOG_WARNING, "Warning: Firmware Version mismatch\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num),
+ detail(firmwareversion, "%s", FirmwareVersion),
+ detail(compatableversion, "%s", Compatable[ ha->nvram->adapter_type ]));
MatchError = 1;
}
if (strncmp(BiosVersion, IPS_COMPAT_BIOS, IPS_COMPAT_ID_LENGTH) != 0)
{
if (ips_cd_boot == 0)
- printk(KERN_WARNING "Warning: Adapter %d BIOS Compatible Version is %s, but should be %s\n",
- ha->host_num, BiosVersion, IPS_COMPAT_BIOS);
+ problem(LOG_WARNING, "Warning: BIOS Version mismatch\n",
+ detail(ips_name, "%s", ips_name),
+ detail(ips_number, "%d", ha->host_num),
+ detail(biosversion, "%s", BiosVersion),
+ detail(compatableversion, "%s", IPS_COMPAT_BIOS));
MatchError = 1;
}
@@ -7340,7 +7405,7 @@
{
ha->nvram->version_mismatch = 1;
if (ips_cd_boot == 0)
- printk(KERN_WARNING "Warning ! ! ! ServeRAID Version Mismatch\n");
+ problem(LOG_WARNING, "Warning ! ! ! ServeRAID Version Mismatch\n");
}
else
{
@@ -7524,7 +7589,9 @@
uint32_t offs;
if (check_mem_region(mem_addr, mem_len)) {
- printk(KERN_WARNING "Couldn't allocate IO Memory space %x len %d.\n", mem_addr, mem_len);
+ pci_problem(LOG_WARNING, pci_dev, "Couldn't allocate IO Memory space\n",
+ detail(mem_addr, "%x", mem_addr),
+ detail(mem_len, "%d", mem_len));
return -1;
}
@@ -7541,7 +7608,9 @@
/* setup I/O mapped area (if applicable) */
if (io_addr) {
if (check_region(io_addr, io_len)) {
- printk(KERN_WARNING "Couldn't allocate IO space %x len %d.\n", io_addr, io_len);
+ pci_problem(LOG_WARNING, pci_dev, "Couldn't allocate IO space\n",
+ detail(mem_addr, "%x", mem_addr),
+ detail(mem_len, "%d", mem_len));
return -1;
}
request_region(io_addr, io_len, "ips");
@@ -7549,7 +7618,7 @@
/* get the revision ID */
if (pci_read_config_byte(pci_dev, PCI_REVISION_ID, &revision_id)) {
- printk(KERN_WARNING "Can't get revision id.\n" );
+ pci_problem(LOG_WARNING, pci_dev, "Can't get the revision id.\n" );
return -1;
}
@@ -7562,10 +7631,12 @@
scsi_set_pci_device(sh, pci_dev);
#endif
if (sh == NULL) {
- printk(KERN_WARNING "Unable to register controller with SCSI subsystem\n" );
+ pci_problem(LOG_WARNING, pci_dev, "Unable to register controller with SCSI subsystem. Failing init.\n",
+ detail(name, "%s", driver_template.name));
return -1;
}
+ scsi_host_introduce(sh, "adapter");
ha = IPS_HA(sh);
memset(ha, 0, sizeof(ips_ha_t));
@@ -7584,7 +7655,7 @@
ha->enq = kmalloc(sizeof(IPS_ENQ), GFP_KERNEL);
if (!ha->enq) {
- printk(KERN_WARNING "Unable to allocate host inquiry structure\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host inquiry structure\n" );
ha->active = 0;
ips_free(ha);
scsi_unregister(sh);
@@ -7596,7 +7667,7 @@
ha->adapt = pci_alloc_consistent(ha->pcidev, sizeof(IPS_ADAPTER) +
sizeof(IPS_IO_CMD), &dma_address);
if (!ha->adapt) {
- printk(KERN_WARNING "Unable to allocate host adapt & dummy structures\n");
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host adapt & dummy structures\n");
ha->active = 0;
ips_free(ha);
scsi_unregister(sh);
@@ -7610,7 +7681,7 @@
ha->conf = kmalloc(sizeof(IPS_CONF), GFP_KERNEL);
if (!ha->conf) {
- printk(KERN_WARNING "Unable to allocate host conf structure\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host conf structure\n" );
ha->active = 0;
ips_free(ha);
scsi_unregister(sh);
@@ -7622,7 +7693,7 @@
ha->nvram = kmalloc(sizeof(IPS_NVRAM_P5), GFP_KERNEL);
if (!ha->nvram) {
- printk(KERN_WARNING "Unable to allocate host NVRAM structure\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host NVRAM structure\n" );
ha->active = 0;
ips_free(ha);
scsi_unregister(sh);
@@ -7634,7 +7705,7 @@
ha->subsys = kmalloc(sizeof(IPS_SUBSYS), GFP_KERNEL);
if (!ha->subsys) {
- printk(KERN_WARNING "Unable to allocate host subsystem structure\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate host subsystem structure\n" );
ha->active = 0;
ips_free(ha);
scsi_unregister(sh);
@@ -7651,7 +7722,7 @@
ha->ioctl_datasize = count;
if (!ha->ioctl_data) {
- printk(KERN_WARNING "Unable to allocate IOCTL data\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate IOCTL data. Disabling ioctls.\n" );
ha->ioctl_data = NULL;
ha->ioctl_order = 0;
ha->ioctl_datasize = 0;
@@ -7748,7 +7819,7 @@
/*
* Initialization failed
*/
- printk(KERN_WARNING "Unable to initialize controller\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to initialize controller. Initialization failed.\n" );
ha->active = 0;
ips_free(ha);
scsi_unregister(sh);
@@ -7760,7 +7831,7 @@
/* Install the interrupt handler */
if (request_irq(irq, do_ipsintr, SA_SHIRQ, ips_name, ha)) {
- printk(KERN_WARNING "Unable to install interrupt handler\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to install interrupt handler\n" );
ha->active = 0;
ips_free(ha);
scsi_unregister(sh);
@@ -7774,7 +7845,7 @@
*/
ha->max_cmds = 1;
if (!ips_allocatescbs(ha)) {
- printk(KERN_WARNING "Unable to allocate a CCB\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate a CCB\n" );
ha->active = 0;
free_irq(ha->irq, ha);
ips_free(ha);
@@ -7816,7 +7887,7 @@
}
if (!ips_hainit(ha)) {
- printk(KERN_WARNING "Unable to initialize controller\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to initialize controller\n" );
ha->active = 0;
ips_free(ha);
free_irq(ha->irq, ha);
@@ -7830,7 +7901,7 @@
/* allocate CCBs */
if (!ips_allocatescbs(ha)) {
- printk(KERN_WARNING "Unable to allocate CCBs\n" );
+ scsi_host_problem(LOG_WARNING, sh, "Unable to allocate CCBs\n" );
ha->active = 0;
ips_free(ha);
free_irq(ha->irq, ha);
--- linux-2.5.37/drivers/scsi/scsi_problem.h Wed Dec 31 18:00:00 1969
+++ linux-2.5.37-net/drivers/scsi/scsi_problem.h Mon Sep 23 19:56:37 2002
@@ -0,0 +1,64 @@
+/*
+ * Linux Event Logging for the Enterprise
+ * Copyright (c) International Business Machines Corp., 2002
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Please send e-mail to lkessler@users.sourceforge.net if you have
+ * questions or comments.
+ *
+ * Project Website: http://evlog.sourceforge.net/
+ *
+ */
+
+#ifndef _SCSI_PROBLEM_H
+#define _SCSI_PROBLEM_H
+
+#include "scsi.h"
+#include "hosts.h"
+#include <linux/pci_problem.h>
+#include <linux/problem.h>
+
+
+#define scsi_host_detail(dev) \
+ detail(scsi_hostno, "%d", (dev)->host_no), \
+ detail(name, "%s", (dev)->hostt->name)
+
+/* This macro could conditionally provide detail() based on
+ * the value of dev, but one problem() per line restriction
+ * has to be resolved first (just do a printk
+ * to warn the developer if they have used this macro without
+ * valid args) */
+/* DD writers should use for pci based scsi adapter drivers */
+#define scsi_host_problem(sev, dev, string,...) \
+do { \
+ if (dev) \
+ problem(sev, string, scsi_host_detail((struct Scsi_Host*)dev), ## __VA_ARGS__); \
+ else { \
+ if (!dev) \
+ printk("scsi_problem. Invalid usage struct Scsi_Host * is NULL\n"); \
+ } \
+} while (0)
+
+
+/* Since this ultimately resolves to the problem() macro where the
+ * string provided must be unique, a string comment argument is added
+ * to allow multiple introduces to occur from within the same file
+ */
+#define scsi_host_introduce(dev, comment, ...) \
+ introduce(__stringify(KBUILD_MODNAME) " introduces Scsi Adapter: " comment, dev, ## __VA_ARGS__, scsi_host_detail(dev))
+
+#endif /* _SCSI_PROBLEM_H */
--- linux-2.5.37/drivers/include/linux/pci_problem.h Wed Dec 31 18:00:00 1969
+++ linux-2.5.37-net/include/linux/pci_problem.h Mon Sep 23 19:56:11 2002
@@ -0,0 +1,52 @@
+/*
+ * Linux Event Logging for the Enterprise
+ * Copyright (c) International Business Machines Corp., 2002
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Please send e-mail to lkessler@users.sourceforge.net if you have
+ * questions or comments.
+ *
+ * Project Website: http://evlog.sourceforge.net/
+ *
+ */
+
+#ifndef _PCI_PROBLEM_H
+#define _PCI_PROBLEM_H
+
+#include <linux/problem.h>
+
+#define pci_detail(pdev) \
+ detail(pci_name, "%s", (pdev)->name), \
+ detail(pci_slot, "%s", (pdev)->slot_name), \
+ detail(pci_vendorid, "%x", (pdev)->vendor), \
+ detail(pci_deviceid, "%x", (pdev)->device), \
+ detail(pci_dev_addr, "%p", (pdev))
+
+#define pci_problem(sev, pdev, string,...) \
+do { \
+ if (pdev) \
+ problem(sev, string, pci_detail((struct pci_dev *)pdev), ## __VA_ARGS__); \
+ else \
+ printk("pci_problem. Invalid usage struct pci_dev * is NULL\n"); \
+} while (0)
+
+static inline void pci_introduce(struct pci_dev *pdev) {
+ introduce(__stringify(KBUILD_MODNAME) "introduces pci device: ", pdev, pci_detail(pdev));
+}
+
+
+#endif /* _PCI_PROBLEM_H */
next reply other threads:[~2002-09-24 1:52 UTC|newest]
Thread overview: 206+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-09-24 1:54 Larry Kessler [this message]
2002-09-24 2:22 ` [PATCH-RFC] 4 of 4 - New problem logging macros, SCSI RAID device driver Jeff Garzik
2002-09-26 15:52 ` Alan Cox
2002-09-26 22:55 ` [PATCH-RFC] 4 of 4 - New problem logging macros, SCSI RAIDdevice driver Larry Kessler
2002-09-26 22:58 ` Jeff Garzik
2002-09-26 23:07 ` Linus Torvalds
2002-09-27 2:27 ` Jeff Garzik
2002-09-27 4:45 ` Linus Torvalds
2002-09-28 7:46 ` Ingo Molnar
2002-09-28 9:16 ` jw schultz
2002-09-30 14:05 ` Denis Vlasenko
2002-09-30 10:22 ` Tomas Szepe
2002-09-30 11:10 ` jw schultz
2002-09-30 11:17 ` Adrian Bunk
2002-09-30 19:48 ` Rik van Riel
2002-09-30 20:30 ` Christoph Hellwig
2002-09-28 15:40 ` Kernel version [Was: Re: [PATCH-RFC] 4 of 4 - New problem logging macros, SCSI RAIDdevice driver] Horst von Brand
2002-09-29 1:31 ` v2.6 vs v3.0 Linus Torvalds
2002-09-29 6:14 ` james
2002-09-29 6:55 ` Andre Hedrick
2002-09-29 12:59 ` Gerhard Mack
2002-09-29 13:46 ` Dr. David Alan Gilbert
2002-09-29 14:06 ` Wakko Warner
2002-09-29 15:42 ` Jens Axboe
2002-09-29 16:21 ` Alan Cox
2002-09-29 16:17 ` Jens Axboe
2002-09-30 0:39 ` Jeff Chua
2002-09-29 16:22 ` Dave Jones
2002-09-29 16:26 ` Jens Axboe
2002-09-29 21:46 ` Matthias Andree
2002-09-30 7:05 ` Michael Clark
2002-09-30 7:22 ` Andrew Morton
2002-09-30 13:08 ` Kevin Corry
2002-09-30 13:05 ` Kevin Corry
2002-09-30 13:49 ` Michael Clark
2002-09-30 14:26 ` Kevin Corry
2002-09-30 13:59 ` Michael Clark
2002-09-30 15:50 ` Kevin Corry
2002-09-29 17:06 ` Jochen Friedrich
2002-09-29 15:18 ` Trever L. Adams
2002-09-29 15:45 ` Jens Axboe
2002-09-29 15:59 ` Trever L. Adams
2002-09-29 16:06 ` Jens Axboe
2002-09-29 16:13 ` Trever L. Adams
2002-09-30 6:54 ` Kai Henningsen
2002-09-30 18:40 ` Bill Davidsen
2002-10-01 12:38 ` Matthias Andree
2002-10-04 19:58 ` Bill Davidsen
2002-09-29 17:42 ` Linus Torvalds
2002-09-29 17:54 ` Rik van Riel
2002-09-29 18:24 ` Alan Cox
2002-09-30 7:56 ` Jens Axboe
2002-09-30 9:53 ` Andre Hedrick
2002-09-30 11:54 ` Jens Axboe
2002-09-30 12:58 ` Alan Cox
2002-09-30 13:05 ` Jens Axboe
2002-10-01 2:17 ` Andre Hedrick
2002-09-30 16:39 ` jbradford
2002-09-30 16:47 ` Pau Aliagas
2002-09-29 7:16 ` jbradford
2002-09-29 8:08 ` Jeff Garzik
2002-09-29 8:17 ` David S. Miller
2002-09-29 9:12 ` Jens Axboe
2002-09-29 11:19 ` Murray J. Root
2002-09-29 15:50 ` Jens Axboe
2002-09-30 7:01 ` Kai Henningsen
2002-09-29 16:04 ` Zwane Mwaikambo
2002-09-29 14:56 ` Alan Cox
2002-09-29 15:38 ` Jens Axboe
2002-09-29 16:30 ` Dave Jones
2002-09-29 16:42 ` Bjoern A. Zeeb
2002-09-29 21:16 ` Russell King
2002-09-29 21:32 ` Alan Cox
2002-09-29 21:49 ` steve
2002-09-29 21:52 ` Matthias Andree
2002-09-30 7:31 ` Tomas Szepe
2002-09-30 15:33 ` Jan Harkes
2002-09-30 18:13 ` Jeff Willis
2002-09-29 17:48 ` Linus Torvalds
2002-09-29 18:13 ` Jaroslav Kysela
2002-09-30 19:32 ` Bill Davidsen
2002-10-01 6:26 ` Jens Axboe
2002-10-01 7:54 ` Mikael Pettersson
2002-10-01 8:27 ` Jens Axboe
2002-10-01 8:44 ` jbradford
2002-10-01 11:31 ` Alan Cox
2002-10-01 11:25 ` Jens Axboe
2002-09-29 15:34 ` Andi Kleen
2002-09-29 17:26 ` Jochen Friedrich
2002-09-29 17:35 ` Jeff Garzik
2002-09-30 0:00 ` Andi Kleen
2002-10-01 19:28 ` IPv6 stability (success story ;) Petr Baudis
2002-09-29 9:15 ` v2.6 vs v3.0 Jens Axboe
2002-09-29 19:53 ` james
2002-09-29 15:26 ` Matthias Andree
2002-09-29 16:24 ` Alan Cox
2002-09-29 22:00 ` Matthias Andree
2002-09-30 19:02 ` Bill Davidsen
2002-09-30 18:37 ` Bill Davidsen
2002-10-03 15:51 ` [OT] 2.6 not 3.0 - (WAS Re: [PATCH-RFC] 4 of 4 - New problem logging macros, SCSI RAIDdevice) jbradford
2002-10-03 15:57 ` Linus Torvalds
2002-10-03 16:16 ` [OT] 2.6 not 3.0 - (WAS Re: [PATCH-RFC] 4 of 4 - New problem jbradford
2002-10-03 22:30 ` Greg KH
2002-10-04 6:33 ` jbradford
2002-10-04 6:37 ` Greg KH
2002-10-04 7:17 ` jbradford
2002-10-04 7:30 ` Greg KH
2002-10-03 16:37 ` [OT] 2.6 not 3.0 - (WAS Re: [PATCH-RFC] 4 of 4 - New problem logging macros, SCSI RAIDdevice) Alan Cox
2002-10-03 16:56 ` Linus Torvalds
2002-10-03 17:40 ` Alan Cox
2002-10-03 19:55 ` jlnance
2002-10-03 16:51 ` Dave Jones
2002-10-03 17:04 ` Alan Cox
2002-10-03 20:43 ` Andrew Morton
2002-10-03 22:05 ` Dave Jones
2002-10-04 3:46 ` Andreas Boman
2002-10-04 7:44 ` jbradford
2002-10-03 19:51 ` Rik van Riel
2002-10-04 22:26 ` [OT] 2.6 not 3.0 - (NUMA) Martin J. Bligh
2002-10-04 23:13 ` Linus Torvalds
2002-10-05 0:21 ` Martin J. Bligh
2002-10-05 0:36 ` Linus Torvalds
2002-10-05 1:25 ` Michael Hohnbaum
2002-10-05 20:30 ` The reason to call it 3.0 is the desktop (was Re: [OT] 2.6 not 3.0 - (NUMA)) Rob Landley
2002-10-06 2:15 ` Andrew Morton
2002-10-06 9:42 ` Russell King
2002-10-06 17:06 ` Alan Cox
2002-10-06 13:44 ` Oliver Neukum
2002-10-06 15:19 ` Martin J. Bligh
2002-10-06 15:14 ` Oliver Neukum
2002-10-07 8:08 ` Helge Hafting
2002-10-07 9:18 ` Oliver Neukum
2002-10-07 14:11 ` Jan Hudec
2002-10-07 15:01 ` Jesse Pollard
2002-10-07 15:34 ` Jan Hudec
2002-10-08 3:12 ` [OT] " Scott Mcdermott
2002-10-10 23:49 ` Mike Fedyk
2002-10-07 15:15 ` Martin J. Bligh
2002-10-08 13:49 ` Helge Hafting
2002-10-07 17:43 ` Daniel Phillips
2002-10-07 18:31 ` Andrew Morton
2002-10-07 18:51 ` Linus Torvalds
2002-10-07 20:14 ` Alan Cox
2002-10-07 20:31 ` The reason to call it 3.0 is the desktop (was Re: [OT] 2.6 not3.0 " Andrew Morton
2002-10-07 20:46 ` Linus Torvalds
2002-10-07 20:44 ` The reason to call it 3.0 is the desktop (was Re: [OT] 2.6 not 3.0 " Linus Torvalds
2002-10-07 21:16 ` The reason to call it 3.0 is the desktop (was Re: [OT] 2.6 not3.0 " Andrew Morton
2002-10-07 23:47 ` jw schultz
2002-10-11 0:02 ` Mike Fedyk
2002-10-07 18:58 ` The reason to call it 3.0 is the desktop (was Re: [OT] 2.6 not 3.0 " Chris Friesen
2002-10-07 19:21 ` Daniel Phillips
2002-10-07 19:35 ` Linus Torvalds
2002-10-08 0:39 ` Theodore Ts'o
2002-10-08 2:59 ` Andrew Morton
2002-10-08 16:15 ` Theodore Ts'o
2002-10-08 19:39 ` Andrew Morton
2002-10-08 17:06 ` Rob Landley
2002-10-07 19:36 ` Andrew Morton
2002-10-08 2:36 ` Simon Kirby
2002-10-08 2:47 ` Daniel Phillips
2002-10-08 2:50 ` Andrew Morton
2002-10-08 2:54 ` Simon Kirby
2002-10-08 3:00 ` Andrew Morton
2002-10-08 16:17 ` Theodore Ts'o
2002-10-08 12:49 ` jlnance
2002-10-08 17:09 ` Andrew Morton
2002-10-10 20:53 ` Thomas Zimmerman
2002-10-08 13:54 ` Helge Hafting
2002-10-08 15:31 ` Andreas Dilger
2002-10-07 19:05 ` Daniel Phillips
2002-10-07 19:24 ` Linus Torvalds
2002-10-07 20:02 ` Daniel Phillips
2002-10-07 20:14 ` Andrew Morton
2002-10-07 20:22 ` Daniel Phillips
2002-10-07 20:28 ` Linus Torvalds
2002-10-07 21:16 ` Daniel Phillips
2002-10-07 21:55 ` Linus Torvalds
2002-10-07 22:02 ` Daniel Phillips
2002-10-07 22:12 ` Andrew Morton
2002-10-08 8:49 ` Padraig Brady
2002-10-07 22:14 ` Charles Cazabon
2002-10-30 18:26 ` Lee Leahu
2002-10-06 6:33 ` Martin J. Bligh
2002-10-07 5:28 ` John Alvord
2002-10-07 8:39 ` The reason to call it 3.0 is the desktop (was Re: [OT] 2.6 n Giuliano Pochini
2002-10-07 13:56 ` The reason to call it 3.0 is the desktop (was Re: [OT] 2.6 not 3.0 - (NUMA)) Jesse Pollard
2002-10-07 14:03 ` Rob Landley
2002-10-08 22:14 ` Jesse Pollard
2002-10-08 19:11 ` Rob Landley
2002-10-09 8:17 ` Alexander Kellett
2002-10-07 18:22 ` Daniel Phillips
2002-10-08 8:19 ` Jan Hudec
2002-10-11 23:53 ` Hans Reiser
2002-10-11 20:26 ` Rob Landley
2002-10-12 4:14 ` Nick LeRoy
2002-10-13 17:27 ` Rob Landley
2002-10-12 10:03 ` Hans Reiser
2002-10-13 17:32 ` Rob Landley
2002-10-13 23:51 ` Hans Reiser
2002-10-14 16:33 ` Rob Landley
2002-10-14 7:10 ` Nikita Danilov
2002-10-21 15:36 ` [OT] Please don't call it 3.0!! (was Re: The reason to call it 3.0 is the desktop (was Re: [OT] 2.6 not 3.0 - (NUMA))) Calin A. Culianu
2002-10-21 16:20 ` Wakko Warner
2002-10-12 11:42 ` The reason to call it 3.0 is the desktop (was Re: [OT] 2.6 not 3.0 - (NUMA)) Matthias Andree
2002-10-12 14:56 ` Hugh Dickins
2002-09-27 11:32 ` [PATCH-RFC] 4 of 4 - New problem logging macros, SCSI RAIDdevice driver Alan Cox
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3D8FC5BC.51A8FCCF@us.ibm.com \
--to=kessler@us.ibm.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=cgl_discussion@osdl.org \
--cc=evlog-developers@lists.sourceforge.net \
--cc=ipslinux@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
--cc=saw@saw.sw.com.sg \
--cc=torvalds@home.transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).