diff options
author | Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> | 2013-11-05 06:37:08 -0500 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2013-11-08 11:10:30 -0500 |
commit | 542d7b0015b8cb30d7c0772657408c6a6e9a8675 (patch) | |
tree | d97721b259dd7d057621d0e5370d85fff3b5907f | |
parent | fec23f63115622cfc82ed92e5d9348cb81c69173 (diff) |
skd: reorder construct/destruct code
Reorder placement of skd_construct(), skd_cons_sg_list(), skd_destruct()
and skd_free_sg_list() functions. Then remove no longer needed function
prototypes.
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | drivers/block/skd_main.c | 305 |
1 files changed, 141 insertions, 164 deletions
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c index 2886a8c3a64d..9199c93be926 100644 --- a/drivers/block/skd_main.c +++ b/drivers/block/skd_main.c | |||
@@ -449,7 +449,6 @@ MODULE_PARM_DESC(skd_isr_comp_limit, "s1120 isr comp limit (0=none) default=4"); | |||
449 | /* Major device number dynamically assigned. */ | 449 | /* Major device number dynamically assigned. */ |
450 | static u32 skd_major; | 450 | static u32 skd_major; |
451 | 451 | ||
452 | static struct skd_device *skd_construct(struct pci_dev *pdev); | ||
453 | static void skd_destruct(struct skd_device *skdev); | 452 | static void skd_destruct(struct skd_device *skdev); |
454 | static const struct block_device_operations skd_blockdev_ops; | 453 | static const struct block_device_operations skd_blockdev_ops; |
455 | static void skd_send_fitmsg(struct skd_device *skdev, | 454 | static void skd_send_fitmsg(struct skd_device *skdev, |
@@ -4115,96 +4114,6 @@ static void skd_release_irq(struct skd_device *skdev) | |||
4115 | ***************************************************************************** | 4114 | ***************************************************************************** |
4116 | */ | 4115 | */ |
4117 | 4116 | ||
4118 | static int skd_cons_skcomp(struct skd_device *skdev); | ||
4119 | static int skd_cons_skmsg(struct skd_device *skdev); | ||
4120 | static int skd_cons_skreq(struct skd_device *skdev); | ||
4121 | static int skd_cons_skspcl(struct skd_device *skdev); | ||
4122 | static int skd_cons_sksb(struct skd_device *skdev); | ||
4123 | static struct fit_sg_descriptor *skd_cons_sg_list(struct skd_device *skdev, | ||
4124 | u32 n_sg, | ||
4125 | dma_addr_t *ret_dma_addr); | ||
4126 | static int skd_cons_disk(struct skd_device *skdev); | ||
4127 | |||
4128 | #define SKD_N_DEV_TABLE 16u | ||
4129 | static u32 skd_next_devno; | ||
4130 | |||
4131 | static struct skd_device *skd_construct(struct pci_dev *pdev) | ||
4132 | { | ||
4133 | struct skd_device *skdev; | ||
4134 | int blk_major = skd_major; | ||
4135 | int rc; | ||
4136 | |||
4137 | skdev = kzalloc(sizeof(*skdev), GFP_KERNEL); | ||
4138 | |||
4139 | if (!skdev) { | ||
4140 | pr_err(PFX "(%s): memory alloc failure\n", | ||
4141 | pci_name(pdev)); | ||
4142 | return NULL; | ||
4143 | } | ||
4144 | |||
4145 | skdev->state = SKD_DRVR_STATE_LOAD; | ||
4146 | skdev->pdev = pdev; | ||
4147 | skdev->devno = skd_next_devno++; | ||
4148 | skdev->major = blk_major; | ||
4149 | skdev->irq_type = skd_isr_type; | ||
4150 | sprintf(skdev->name, DRV_NAME "%d", skdev->devno); | ||
4151 | skdev->dev_max_queue_depth = 0; | ||
4152 | |||
4153 | skdev->num_req_context = skd_max_queue_depth; | ||
4154 | skdev->num_fitmsg_context = skd_max_queue_depth; | ||
4155 | skdev->n_special = skd_max_pass_thru; | ||
4156 | skdev->cur_max_queue_depth = 1; | ||
4157 | skdev->queue_low_water_mark = 1; | ||
4158 | skdev->proto_ver = 99; | ||
4159 | skdev->sgs_per_request = skd_sgs_per_request; | ||
4160 | skdev->dbg_level = skd_dbg_level; | ||
4161 | |||
4162 | atomic_set(&skdev->device_count, 0); | ||
4163 | |||
4164 | spin_lock_init(&skdev->lock); | ||
4165 | |||
4166 | INIT_WORK(&skdev->completion_worker, skd_completion_worker); | ||
4167 | |||
4168 | pr_debug("%s:%s:%d skcomp\n", skdev->name, __func__, __LINE__); | ||
4169 | rc = skd_cons_skcomp(skdev); | ||
4170 | if (rc < 0) | ||
4171 | goto err_out; | ||
4172 | |||
4173 | pr_debug("%s:%s:%d skmsg\n", skdev->name, __func__, __LINE__); | ||
4174 | rc = skd_cons_skmsg(skdev); | ||
4175 | if (rc < 0) | ||
4176 | goto err_out; | ||
4177 | |||
4178 | pr_debug("%s:%s:%d skreq\n", skdev->name, __func__, __LINE__); | ||
4179 | rc = skd_cons_skreq(skdev); | ||
4180 | if (rc < 0) | ||
4181 | goto err_out; | ||
4182 | |||
4183 | pr_debug("%s:%s:%d skspcl\n", skdev->name, __func__, __LINE__); | ||
4184 | rc = skd_cons_skspcl(skdev); | ||
4185 | if (rc < 0) | ||
4186 | goto err_out; | ||
4187 | |||
4188 | pr_debug("%s:%s:%d sksb\n", skdev->name, __func__, __LINE__); | ||
4189 | rc = skd_cons_sksb(skdev); | ||
4190 | if (rc < 0) | ||
4191 | goto err_out; | ||
4192 | |||
4193 | pr_debug("%s:%s:%d disk\n", skdev->name, __func__, __LINE__); | ||
4194 | rc = skd_cons_disk(skdev); | ||
4195 | if (rc < 0) | ||
4196 | goto err_out; | ||
4197 | |||
4198 | pr_debug("%s:%s:%d VICTORY\n", skdev->name, __func__, __LINE__); | ||
4199 | return skdev; | ||
4200 | |||
4201 | err_out: | ||
4202 | pr_debug("%s:%s:%d construct failed\n", | ||
4203 | skdev->name, __func__, __LINE__); | ||
4204 | skd_destruct(skdev); | ||
4205 | return NULL; | ||
4206 | } | ||
4207 | |||
4208 | static int skd_cons_skcomp(struct skd_device *skdev) | 4117 | static int skd_cons_skcomp(struct skd_device *skdev) |
4209 | { | 4118 | { |
4210 | int rc = 0; | 4119 | int rc = 0; |
@@ -4292,6 +4201,35 @@ err_out: | |||
4292 | return rc; | 4201 | return rc; |
4293 | } | 4202 | } |
4294 | 4203 | ||
4204 | static struct fit_sg_descriptor *skd_cons_sg_list(struct skd_device *skdev, | ||
4205 | u32 n_sg, | ||
4206 | dma_addr_t *ret_dma_addr) | ||
4207 | { | ||
4208 | struct fit_sg_descriptor *sg_list; | ||
4209 | u32 nbytes; | ||
4210 | |||
4211 | nbytes = sizeof(*sg_list) * n_sg; | ||
4212 | |||
4213 | sg_list = pci_alloc_consistent(skdev->pdev, nbytes, ret_dma_addr); | ||
4214 | |||
4215 | if (sg_list != NULL) { | ||
4216 | uint64_t dma_address = *ret_dma_addr; | ||
4217 | u32 i; | ||
4218 | |||
4219 | memset(sg_list, 0, nbytes); | ||
4220 | |||
4221 | for (i = 0; i < n_sg - 1; i++) { | ||
4222 | uint64_t ndp_off; | ||
4223 | ndp_off = (i + 1) * sizeof(struct fit_sg_descriptor); | ||
4224 | |||
4225 | sg_list[i].next_desc_ptr = dma_address + ndp_off; | ||
4226 | } | ||
4227 | sg_list[i].next_desc_ptr = 0LL; | ||
4228 | } | ||
4229 | |||
4230 | return sg_list; | ||
4231 | } | ||
4232 | |||
4295 | static int skd_cons_skreq(struct skd_device *skdev) | 4233 | static int skd_cons_skreq(struct skd_device *skdev) |
4296 | { | 4234 | { |
4297 | int rc = 0; | 4235 | int rc = 0; |
@@ -4465,35 +4403,6 @@ err_out: | |||
4465 | return rc; | 4403 | return rc; |
4466 | } | 4404 | } |
4467 | 4405 | ||
4468 | static struct fit_sg_descriptor *skd_cons_sg_list(struct skd_device *skdev, | ||
4469 | u32 n_sg, | ||
4470 | dma_addr_t *ret_dma_addr) | ||
4471 | { | ||
4472 | struct fit_sg_descriptor *sg_list; | ||
4473 | u32 nbytes; | ||
4474 | |||
4475 | nbytes = sizeof(*sg_list) * n_sg; | ||
4476 | |||
4477 | sg_list = pci_alloc_consistent(skdev->pdev, nbytes, ret_dma_addr); | ||
4478 | |||
4479 | if (sg_list != NULL) { | ||
4480 | uint64_t dma_address = *ret_dma_addr; | ||
4481 | u32 i; | ||
4482 | |||
4483 | memset(sg_list, 0, nbytes); | ||
4484 | |||
4485 | for (i = 0; i < n_sg - 1; i++) { | ||
4486 | uint64_t ndp_off; | ||
4487 | ndp_off = (i + 1) * sizeof(struct fit_sg_descriptor); | ||
4488 | |||
4489 | sg_list[i].next_desc_ptr = dma_address + ndp_off; | ||
4490 | } | ||
4491 | sg_list[i].next_desc_ptr = 0LL; | ||
4492 | } | ||
4493 | |||
4494 | return sg_list; | ||
4495 | } | ||
4496 | |||
4497 | static int skd_cons_disk(struct skd_device *skdev) | 4406 | static int skd_cons_disk(struct skd_device *skdev) |
4498 | { | 4407 | { |
4499 | int rc = 0; | 4408 | int rc = 0; |
@@ -4550,50 +4459,92 @@ err_out: | |||
4550 | return rc; | 4459 | return rc; |
4551 | } | 4460 | } |
4552 | 4461 | ||
4553 | /* | 4462 | #define SKD_N_DEV_TABLE 16u |
4554 | ***************************************************************************** | 4463 | static u32 skd_next_devno; |
4555 | * DESTRUCT (FREE) | ||
4556 | ***************************************************************************** | ||
4557 | */ | ||
4558 | |||
4559 | static void skd_free_skcomp(struct skd_device *skdev); | ||
4560 | static void skd_free_skmsg(struct skd_device *skdev); | ||
4561 | static void skd_free_skreq(struct skd_device *skdev); | ||
4562 | static void skd_free_skspcl(struct skd_device *skdev); | ||
4563 | static void skd_free_sksb(struct skd_device *skdev); | ||
4564 | static void skd_free_sg_list(struct skd_device *skdev, | ||
4565 | struct fit_sg_descriptor *sg_list, | ||
4566 | u32 n_sg, dma_addr_t dma_addr); | ||
4567 | static void skd_free_disk(struct skd_device *skdev); | ||
4568 | 4464 | ||
4569 | static void skd_destruct(struct skd_device *skdev) | 4465 | static struct skd_device *skd_construct(struct pci_dev *pdev) |
4570 | { | 4466 | { |
4571 | if (skdev == NULL) | 4467 | struct skd_device *skdev; |
4572 | return; | 4468 | int blk_major = skd_major; |
4469 | int rc; | ||
4573 | 4470 | ||
4471 | skdev = kzalloc(sizeof(*skdev), GFP_KERNEL); | ||
4574 | 4472 | ||
4575 | pr_debug("%s:%s:%d disk\n", skdev->name, __func__, __LINE__); | 4473 | if (!skdev) { |
4576 | skd_free_disk(skdev); | 4474 | pr_err(PFX "(%s): memory alloc failure\n", |
4475 | pci_name(pdev)); | ||
4476 | return NULL; | ||
4477 | } | ||
4577 | 4478 | ||
4578 | pr_debug("%s:%s:%d sksb\n", skdev->name, __func__, __LINE__); | 4479 | skdev->state = SKD_DRVR_STATE_LOAD; |
4579 | skd_free_sksb(skdev); | 4480 | skdev->pdev = pdev; |
4481 | skdev->devno = skd_next_devno++; | ||
4482 | skdev->major = blk_major; | ||
4483 | skdev->irq_type = skd_isr_type; | ||
4484 | sprintf(skdev->name, DRV_NAME "%d", skdev->devno); | ||
4485 | skdev->dev_max_queue_depth = 0; | ||
4580 | 4486 | ||
4581 | pr_debug("%s:%s:%d skspcl\n", skdev->name, __func__, __LINE__); | 4487 | skdev->num_req_context = skd_max_queue_depth; |
4582 | skd_free_skspcl(skdev); | 4488 | skdev->num_fitmsg_context = skd_max_queue_depth; |
4489 | skdev->n_special = skd_max_pass_thru; | ||
4490 | skdev->cur_max_queue_depth = 1; | ||
4491 | skdev->queue_low_water_mark = 1; | ||
4492 | skdev->proto_ver = 99; | ||
4493 | skdev->sgs_per_request = skd_sgs_per_request; | ||
4494 | skdev->dbg_level = skd_dbg_level; | ||
4583 | 4495 | ||
4584 | pr_debug("%s:%s:%d skreq\n", skdev->name, __func__, __LINE__); | 4496 | atomic_set(&skdev->device_count, 0); |
4585 | skd_free_skreq(skdev); | ||
4586 | 4497 | ||
4587 | pr_debug("%s:%s:%d skmsg\n", skdev->name, __func__, __LINE__); | 4498 | spin_lock_init(&skdev->lock); |
4588 | skd_free_skmsg(skdev); | 4499 | |
4500 | INIT_WORK(&skdev->completion_worker, skd_completion_worker); | ||
4589 | 4501 | ||
4590 | pr_debug("%s:%s:%d skcomp\n", skdev->name, __func__, __LINE__); | 4502 | pr_debug("%s:%s:%d skcomp\n", skdev->name, __func__, __LINE__); |
4591 | skd_free_skcomp(skdev); | 4503 | rc = skd_cons_skcomp(skdev); |
4504 | if (rc < 0) | ||
4505 | goto err_out; | ||
4592 | 4506 | ||
4593 | pr_debug("%s:%s:%d skdev\n", skdev->name, __func__, __LINE__); | 4507 | pr_debug("%s:%s:%d skmsg\n", skdev->name, __func__, __LINE__); |
4594 | kfree(skdev); | 4508 | rc = skd_cons_skmsg(skdev); |
4509 | if (rc < 0) | ||
4510 | goto err_out; | ||
4511 | |||
4512 | pr_debug("%s:%s:%d skreq\n", skdev->name, __func__, __LINE__); | ||
4513 | rc = skd_cons_skreq(skdev); | ||
4514 | if (rc < 0) | ||
4515 | goto err_out; | ||
4516 | |||
4517 | pr_debug("%s:%s:%d skspcl\n", skdev->name, __func__, __LINE__); | ||
4518 | rc = skd_cons_skspcl(skdev); | ||
4519 | if (rc < 0) | ||
4520 | goto err_out; | ||
4521 | |||
4522 | pr_debug("%s:%s:%d sksb\n", skdev->name, __func__, __LINE__); | ||
4523 | rc = skd_cons_sksb(skdev); | ||
4524 | if (rc < 0) | ||
4525 | goto err_out; | ||
4526 | |||
4527 | pr_debug("%s:%s:%d disk\n", skdev->name, __func__, __LINE__); | ||
4528 | rc = skd_cons_disk(skdev); | ||
4529 | if (rc < 0) | ||
4530 | goto err_out; | ||
4531 | |||
4532 | pr_debug("%s:%s:%d VICTORY\n", skdev->name, __func__, __LINE__); | ||
4533 | return skdev; | ||
4534 | |||
4535 | err_out: | ||
4536 | pr_debug("%s:%s:%d construct failed\n", | ||
4537 | skdev->name, __func__, __LINE__); | ||
4538 | skd_destruct(skdev); | ||
4539 | return NULL; | ||
4595 | } | 4540 | } |
4596 | 4541 | ||
4542 | /* | ||
4543 | ***************************************************************************** | ||
4544 | * DESTRUCT (FREE) | ||
4545 | ***************************************************************************** | ||
4546 | */ | ||
4547 | |||
4597 | static void skd_free_skcomp(struct skd_device *skdev) | 4548 | static void skd_free_skcomp(struct skd_device *skdev) |
4598 | { | 4549 | { |
4599 | if (skdev->skcomp_table != NULL) { | 4550 | if (skdev->skcomp_table != NULL) { |
@@ -4636,6 +4587,19 @@ static void skd_free_skmsg(struct skd_device *skdev) | |||
4636 | skdev->skmsg_table = NULL; | 4587 | skdev->skmsg_table = NULL; |
4637 | } | 4588 | } |
4638 | 4589 | ||
4590 | static void skd_free_sg_list(struct skd_device *skdev, | ||
4591 | struct fit_sg_descriptor *sg_list, | ||
4592 | u32 n_sg, dma_addr_t dma_addr) | ||
4593 | { | ||
4594 | if (sg_list != NULL) { | ||
4595 | u32 nbytes; | ||
4596 | |||
4597 | nbytes = sizeof(*sg_list) * n_sg; | ||
4598 | |||
4599 | pci_free_consistent(skdev->pdev, nbytes, sg_list, dma_addr); | ||
4600 | } | ||
4601 | } | ||
4602 | |||
4639 | static void skd_free_skreq(struct skd_device *skdev) | 4603 | static void skd_free_skreq(struct skd_device *skdev) |
4640 | { | 4604 | { |
4641 | u32 i; | 4605 | u32 i; |
@@ -4732,19 +4696,6 @@ static void skd_free_sksb(struct skd_device *skdev) | |||
4732 | skspcl->req.sksg_dma_address = 0; | 4696 | skspcl->req.sksg_dma_address = 0; |
4733 | } | 4697 | } |
4734 | 4698 | ||
4735 | static void skd_free_sg_list(struct skd_device *skdev, | ||
4736 | struct fit_sg_descriptor *sg_list, | ||
4737 | u32 n_sg, dma_addr_t dma_addr) | ||
4738 | { | ||
4739 | if (sg_list != NULL) { | ||
4740 | u32 nbytes; | ||
4741 | |||
4742 | nbytes = sizeof(*sg_list) * n_sg; | ||
4743 | |||
4744 | pci_free_consistent(skdev->pdev, nbytes, sg_list, dma_addr); | ||
4745 | } | ||
4746 | } | ||
4747 | |||
4748 | static void skd_free_disk(struct skd_device *skdev) | 4699 | static void skd_free_disk(struct skd_device *skdev) |
4749 | { | 4700 | { |
4750 | struct gendisk *disk = skdev->disk; | 4701 | struct gendisk *disk = skdev->disk; |
@@ -4761,7 +4712,33 @@ static void skd_free_disk(struct skd_device *skdev) | |||
4761 | skdev->disk = NULL; | 4712 | skdev->disk = NULL; |
4762 | } | 4713 | } |
4763 | 4714 | ||
4715 | static void skd_destruct(struct skd_device *skdev) | ||
4716 | { | ||
4717 | if (skdev == NULL) | ||
4718 | return; | ||
4719 | |||
4720 | |||
4721 | pr_debug("%s:%s:%d disk\n", skdev->name, __func__, __LINE__); | ||
4722 | skd_free_disk(skdev); | ||
4723 | |||
4724 | pr_debug("%s:%s:%d sksb\n", skdev->name, __func__, __LINE__); | ||
4725 | skd_free_sksb(skdev); | ||
4726 | |||
4727 | pr_debug("%s:%s:%d skspcl\n", skdev->name, __func__, __LINE__); | ||
4728 | skd_free_skspcl(skdev); | ||
4729 | |||
4730 | pr_debug("%s:%s:%d skreq\n", skdev->name, __func__, __LINE__); | ||
4731 | skd_free_skreq(skdev); | ||
4732 | |||
4733 | pr_debug("%s:%s:%d skmsg\n", skdev->name, __func__, __LINE__); | ||
4734 | skd_free_skmsg(skdev); | ||
4764 | 4735 | ||
4736 | pr_debug("%s:%s:%d skcomp\n", skdev->name, __func__, __LINE__); | ||
4737 | skd_free_skcomp(skdev); | ||
4738 | |||
4739 | pr_debug("%s:%s:%d skdev\n", skdev->name, __func__, __LINE__); | ||
4740 | kfree(skdev); | ||
4741 | } | ||
4765 | 4742 | ||
4766 | /* | 4743 | /* |
4767 | ***************************************************************************** | 4744 | ***************************************************************************** |