mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
pci back: Various fixes.
- remove superfluous call to pciback_field_is_dup() - fix a variable type mismatch in pciback_field_is_dup() - make readability improvements by using the OFFSET macro - revises quirk data output via the sysfs quirks node so that - displayed offset information includes base_offset. Thanks to Jambunathan K. for giving such specific bug diagnosis. Signed-off-by: Chris Bookholt <hap10@tycho.ncsc.mil>
This commit is contained in:
1 parent
dce5dbf051
commit
ac4fb3c4ec
4 files changed
+14
-19
No files matched your search
@@ -349,17 +349,13 @@ void pciback_config_free_dev(struct pci_dev *dev)
|
||||
|
||||
int pciback_config_add_field_offset(struct pci_dev *dev,
|
||||
struct config_field *field,
|
||||
unsigned int offset)
|
||||
unsigned int base_offset)
|
||||
{
|
||||
int err = 0;
|
||||
struct pciback_dev_data *dev_data = pci_get_drvdata(dev);
|
||||
struct config_field_entry *cfg_entry;
|
||||
void *tmp;
|
||||
|
||||
/* silently ignore duplicate fields */
|
||||
if (pciback_field_is_dup(dev, field->offset + offset))
|
||||
goto out;
|
||||
|
||||
cfg_entry = kmalloc(sizeof(*cfg_entry), GFP_KERNEL);
|
||||
if (!cfg_entry) {
|
||||
err = -ENOMEM;
|
||||
@@ -368,7 +364,12 @@ int pciback_config_add_field_offset(struct pci_dev *dev,
|
||||
|
||||
cfg_entry->data = NULL;
|
||||
cfg_entry->field = field;
|
||||
cfg_entry->base_offset = offset;
|
||||
cfg_entry->base_offset = base_offset;
|
||||
|
||||
/* silently ignore duplicate fields */
|
||||
err = pciback_field_is_dup(dev,OFFSET(cfg_entry));
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
if (field->init) {
|
||||
tmp = field->init(dev, OFFSET(cfg_entry));
|
||||
|
||||
@@ -32,16 +32,14 @@ static inline void register_quirk(struct pciback_config_quirk *quirk)
|
||||
list_add_tail(&quirk->quirks_list, &pciback_quirks);
|
||||
}
|
||||
|
||||
int pciback_field_is_dup(struct pci_dev *dev, int reg)
|
||||
int pciback_field_is_dup(struct pci_dev *dev, unsigned int reg)
|
||||
{
|
||||
int ret = 0;
|
||||
struct pciback_dev_data *dev_data = pci_get_drvdata(dev);
|
||||
struct config_field *field;
|
||||
struct config_field_entry *cfg_entry;
|
||||
|
||||
list_for_each_entry(cfg_entry, &dev_data->config_fields, list) {
|
||||
field = cfg_entry->field;
|
||||
if (field->offset == reg) {
|
||||
if ( OFFSET(cfg_entry) == reg) {
|
||||
ret = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -30,6 +30,6 @@ void pciback_config_field_free(struct config_field *field);
|
||||
|
||||
int pciback_config_quirk_release(struct pci_dev *dev);
|
||||
|
||||
int pciback_field_is_dup(struct pci_dev *dev, int reg);
|
||||
int pciback_field_is_dup(struct pci_dev *dev, unsigned int reg);
|
||||
|
||||
#endif
|
||||
@@ -589,10 +589,6 @@ static int pcistub_reg_add(int domain, int bus, int slot, int func, int reg,
|
||||
}
|
||||
dev = psdev->dev;
|
||||
|
||||
/* check for duplicate field */
|
||||
if (pciback_field_is_dup(dev, reg))
|
||||
goto out;
|
||||
|
||||
field = kzalloc(sizeof(*field), GFP_ATOMIC);
|
||||
if (!field) {
|
||||
err = -ENOMEM;
|
||||
@@ -728,10 +724,10 @@ static ssize_t pcistub_quirk_show(struct device_driver *drv, char *buf)
|
||||
if (count >= PAGE_SIZE)
|
||||
goto out;
|
||||
|
||||
count += scnprintf(buf + count, PAGE_SIZE -
|
||||
count, "\t\t%08x:%01x:%08x\n",
|
||||
field->offset, field->size,
|
||||
field->mask);
|
||||
count += scnprintf(buf + count, PAGE_SIZE - count,
|
||||
"\t\t%08x:%01x:%08x\n",
|
||||
cfg_entry->base_offset + field->offset,
|
||||
field->size, field->mask);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||