diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2016-02-22 15:09:52 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2016-02-29 18:47:36 -0500 |
commit | 408641e93aa5283e586fefd4dc72e67c92aae075 (patch) | |
tree | f261bf5a0335405a727c67fc09b23f772de588dc /drivers/pci/access.c | |
parent | f1cd93f9aabe3b8dcac53de1c88279dbd8e529c3 (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.c | 47 |
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 | ||
280 | struct 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 | */ |
351 | static int pci_vpd_wait(struct pci_dev *dev) | 342 | static 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) | |||
384 | static ssize_t pci_vpd_read(struct pci_dev *dev, loff_t pos, size_t count, | 374 | static 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: | |||
452 | static ssize_t pci_vpd_write(struct pci_dev *dev, loff_t pos, size_t count, | 441 | static 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 | ||
551 | int pci_vpd_init(struct pci_dev *dev) | 539 | int 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 | ||
577 | void pci_vpd_release(struct pci_dev *dev) | 565 | void 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 | /** |