Commit 263dc7ec authored by Matt Domsch's avatar Matt Domsch

EDD: until SCSI layer sysfs is fixed, don't use it for raw_data either.

parent dae98c27
...@@ -55,7 +55,7 @@ MODULE_AUTHOR("Matt Domsch <Matt_Domsch@Dell.com>"); ...@@ -55,7 +55,7 @@ MODULE_AUTHOR("Matt Domsch <Matt_Domsch@Dell.com>");
MODULE_DESCRIPTION("sysfs interface to BIOS EDD information"); MODULE_DESCRIPTION("sysfs interface to BIOS EDD information");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
#define EDD_VERSION "0.08 2003-Jan-07" #define EDD_VERSION "0.09 2003-Jan-22"
#define EDD_DEVICE_NAME_SIZE 16 #define EDD_DEVICE_NAME_SIZE 16
#define REPORT_URL "http://domsch.com/linux/edd30/results.html" #define REPORT_URL "http://domsch.com/linux/edd30/results.html"
...@@ -76,6 +76,7 @@ struct edd_attribute { ...@@ -76,6 +76,7 @@ struct edd_attribute {
static int edd_dev_is_type(struct edd_device *edev, const char *type); static int edd_dev_is_type(struct edd_device *edev, const char *type);
static struct pci_dev *edd_get_pci_dev(struct edd_device *edev); static struct pci_dev *edd_get_pci_dev(struct edd_device *edev);
static struct scsi_device *edd_find_matching_scsi_device(struct edd_device *edev); static struct scsi_device *edd_find_matching_scsi_device(struct edd_device *edev);
static int kernel_has_scsi(void);
static struct edd_device *edd_devices[EDDMAXNR]; static struct edd_device *edd_devices[EDDMAXNR];
...@@ -338,7 +339,7 @@ edd_show_raw_data(struct edd_device *edev, char *buf) ...@@ -338,7 +339,7 @@ edd_show_raw_data(struct edd_device *edev, char *buf)
} }
} }
if (found_pci && edd_dev_is_type(edev, "SCSI")) { if (found_pci && kernel_has_scsi() && edd_dev_is_type(edev, "SCSI")) {
sd = edd_find_matching_scsi_device(edev); sd = edd_find_matching_scsi_device(edev);
if (!sd) { if (!sd) {
p += snprintf(p, left, "Error: BIOS says this is a SCSI device, but\n"); p += snprintf(p, left, "Error: BIOS says this is a SCSI device, but\n");
...@@ -650,6 +651,16 @@ edd_create_symlink_to_pcidev(struct edd_device *edev) ...@@ -650,6 +651,16 @@ edd_create_symlink_to_pcidev(struct edd_device *edev)
return sysfs_create_link(&edev->kobj,&pci_dev->dev.kobj,"pci_dev"); return sysfs_create_link(&edev->kobj,&pci_dev->dev.kobj,"pci_dev");
} }
/*
* FIXME - as of 15-Jan-2003, there are some non-"scsi_device"s on the
* scsi_bus list. The following functions could possibly mis-access
* memory in that case. This is actually a problem with the SCSI
* layer, which is being addressed there. Until then, don't use the
* SCSI functions.
*/
#undef CONFIG_SCSI
#undef CONFIG_SCSI_MODULE
#if defined(CONFIG_SCSI) || defined(CONFIG_SCSI_MODULE) #if defined(CONFIG_SCSI) || defined(CONFIG_SCSI_MODULE)
struct edd_match_data { struct edd_match_data {
...@@ -728,8 +739,17 @@ edd_create_symlink_to_scsidev(struct edd_device *edev) ...@@ -728,8 +739,17 @@ edd_create_symlink_to_scsidev(struct edd_device *edev)
return rc; return rc;
} }
static int kernel_has_scsi(void)
{
return 1;
}
#else #else
static int kernel_has_scsi(void)
{
return 0;
}
static struct scsi_device * static struct scsi_device *
edd_find_matching_scsi_device(struct edd_device *edev) edd_find_matching_scsi_device(struct edd_device *edev)
{ {
...@@ -763,16 +783,7 @@ static void edd_populate_dir(struct edd_device * edev) ...@@ -763,16 +783,7 @@ static void edd_populate_dir(struct edd_device * edev)
if (!error) { if (!error) {
edd_create_symlink_to_pcidev(edev); edd_create_symlink_to_pcidev(edev);
/* FIXME - as of 15-Jan-2003, there are some
non-"scsi_device"s on the scsi_bus list. The following
function could possibly mis-access memory in that
case. This is actually a problem with the SCSI
layer, which is being addressed there. Until then,
don't call this function.
edd_create_symlink_to_scsidev(edev); edd_create_symlink_to_scsidev(edev);
*/
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment