aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/access.c
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2016-02-22 15:09:52 -0500
committerBjorn Helgaas <bhelgaas@google.com>2016-02-29 18:47:36 -0500
commit408641e93aa5283e586fefd4dc72e67c92aae075 (patch)
treef261bf5a0335405a727c67fc09b23f772de588dc /drivers/pci/access.c
parentf1cd93f9aabe3b8dcac53de1c88279dbd8e529c3 (diff)
PCI: Fold struct pci_vpd_pci22 into struct pci_vpd
We only support one flavor of VPD, so there's no need to complicate things by having a "generic" struct pci_vpd and a more specific struct pci_vpd_pci22. Fold struct pci_vpd_pci22 directly into struct pci_vpd. [bhelgaas: remove NULL check before kfree of dev->vpd (per kfreeaddr.cocci)] Tested-by: Shane Seymour <shane.seymour@hpe.com> Tested-by: Babu Moger <babu.moger@oracle.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Hannes Reinecke <hare@suse.com>
Diffstat (limited to 'drivers/pci/access.c')
-rw-r--r--drivers/pci/access.c47
1 files changed, 17 insertions, 30 deletions
diff --git a/drivers/pci/access.c b/drivers/pci/access.c
index ee205deb95b4..8449d6b58178 100644
--- a/drivers/pci/access.c
+++ b/drivers/pci/access.c
@@ -277,15 +277,6 @@ EXPORT_SYMBOL(pci_write_vpd);
277 277
278#define PCI_VPD_MAX_SIZE (PCI_VPD_ADDR_MASK + 1) 278#define PCI_VPD_MAX_SIZE (PCI_VPD_ADDR_MASK + 1)
279 279
280struct pci_vpd_pci22 {
281 struct pci_vpd base;
282 struct mutex lock;
283 u16 flag;
284 u8 cap;
285 u8 busy:1;
286 u8 valid:1;
287};
288
289/** 280/**
290 * pci_vpd_size - determine actual size of Vital Product Data 281 * pci_vpd_size - determine actual size of Vital Product Data
291 * @dev: pci device struct 282 * @dev: pci device struct
@@ -350,8 +341,7 @@ static size_t pci_vpd_size(struct pci_dev *dev, size_t old_size)
350 */ 341 */
351static int pci_vpd_wait(struct pci_dev *dev) 342static int pci_vpd_wait(struct pci_dev *dev)
352{ 343{
353 struct pci_vpd_pci22 *vpd = 344 struct pci_vpd *vpd = dev->vpd;
354 container_of(dev->vpd, struct pci_vpd_pci22, base);
355 unsigned long timeout = jiffies + HZ/20 + 2; 345 unsigned long timeout = jiffies + HZ/20 + 2;
356 u16 status; 346 u16 status;
357 int ret; 347 int ret;
@@ -384,8 +374,7 @@ static int pci_vpd_wait(struct pci_dev *dev)
384static ssize_t pci_vpd_read(struct pci_dev *dev, loff_t pos, size_t count, 374static ssize_t pci_vpd_read(struct pci_dev *dev, loff_t pos, size_t count,
385 void *arg) 375 void *arg)
386{ 376{
387 struct pci_vpd_pci22 *vpd = 377 struct pci_vpd *vpd = dev->vpd;
388 container_of(dev->vpd, struct pci_vpd_pci22, base);
389 int ret; 378 int ret;
390 loff_t end = pos + count; 379 loff_t end = pos + count;
391 u8 *buf = arg; 380 u8 *buf = arg;
@@ -395,17 +384,17 @@ static ssize_t pci_vpd_read(struct pci_dev *dev, loff_t pos, size_t count,
395 384
396 if (!vpd->valid) { 385 if (!vpd->valid) {
397 vpd->valid = 1; 386 vpd->valid = 1;
398 vpd->base.len = pci_vpd_size(dev, vpd->base.len); 387 vpd->len = pci_vpd_size(dev, vpd->len);
399 } 388 }
400 389
401 if (vpd->base.len == 0) 390 if (vpd->len == 0)
402 return -EIO; 391 return -EIO;
403 392
404 if (pos >= vpd->base.len) 393 if (pos > vpd->len)
405 return 0; 394 return 0;
406 395
407 if (end > vpd->base.len) { 396 if (end > vpd->len) {
408 end = vpd->base.len; 397 end = vpd->len;
409 count = end - pos; 398 count = end - pos;
410 } 399 }
411 400
@@ -452,8 +441,7 @@ out:
452static ssize_t pci_vpd_write(struct pci_dev *dev, loff_t pos, size_t count, 441static ssize_t pci_vpd_write(struct pci_dev *dev, loff_t pos, size_t count,
453 const void *arg) 442 const void *arg)
454{ 443{
455 struct pci_vpd_pci22 *vpd = 444 struct pci_vpd *vpd = dev->vpd;
456 container_of(dev->vpd, struct pci_vpd_pci22, base);
457 const u8 *buf = arg; 445 const u8 *buf = arg;
458 loff_t end = pos + count; 446 loff_t end = pos + count;
459 int ret = 0; 447 int ret = 0;
@@ -463,13 +451,13 @@ static ssize_t pci_vpd_write(struct pci_dev *dev, loff_t pos, size_t count,
463 451
464 if (!vpd->valid) { 452 if (!vpd->valid) {
465 vpd->valid = 1; 453 vpd->valid = 1;
466 vpd->base.len = pci_vpd_size(dev, vpd->base.len); 454 vpd->len = pci_vpd_size(dev, vpd->len);
467 } 455 }
468 456
469 if (vpd->base.len == 0) 457 if (vpd->len == 0)
470 return -EIO; 458 return -EIO;
471 459
472 if (end > vpd->base.len) 460 if (end > vpd->len)
473 return -EINVAL; 461 return -EINVAL;
474 462
475 if (mutex_lock_killable(&vpd->lock)) 463 if (mutex_lock_killable(&vpd->lock))
@@ -550,7 +538,7 @@ static const struct pci_vpd_ops pci_vpd_f0_ops = {
550 538
551int pci_vpd_init(struct pci_dev *dev) 539int pci_vpd_init(struct pci_dev *dev)
552{ 540{
553 struct pci_vpd_pci22 *vpd; 541 struct pci_vpd *vpd;
554 u8 cap; 542 u8 cap;
555 543
556 cap = pci_find_capability(dev, PCI_CAP_ID_VPD); 544 cap = pci_find_capability(dev, PCI_CAP_ID_VPD);
@@ -561,23 +549,22 @@ int pci_vpd_init(struct pci_dev *dev)
561 if (!vpd) 549 if (!vpd)
562 return -ENOMEM; 550 return -ENOMEM;
563 551
564 vpd->base.len = PCI_VPD_MAX_SIZE; 552 vpd->len = PCI_VPD_MAX_SIZE;
565 if (dev->dev_flags & PCI_DEV_FLAGS_VPD_REF_F0) 553 if (dev->dev_flags & PCI_DEV_FLAGS_VPD_REF_F0)
566 vpd->base.ops = &pci_vpd_f0_ops; 554 vpd->ops = &pci_vpd_f0_ops;
567 else 555 else
568 vpd->base.ops = &pci_vpd_ops; 556 vpd->ops = &pci_vpd_ops;
569 mutex_init(&vpd->lock); 557 mutex_init(&vpd->lock);
570 vpd->cap = cap; 558 vpd->cap = cap;
571 vpd->busy = 0; 559 vpd->busy = 0;
572 vpd->valid = 0; 560 vpd->valid = 0;
573 dev->vpd = &vpd->base; 561 dev->vpd = vpd;
574 return 0; 562 return 0;
575} 563}
576 564
577void pci_vpd_release(struct pci_dev *dev) 565void pci_vpd_release(struct pci_dev *dev)
578{ 566{
579 if (dev->vpd) 567 kfree(dev->vpd);
580 kfree(container_of(dev->vpd, struct pci_vpd_pci22, base));
581} 568}
582 569
583/** 570/**