aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>2013-11-05 06:37:08 -0500
committerJens Axboe <axboe@kernel.dk>2013-11-08 11:10:30 -0500
commit542d7b0015b8cb30d7c0772657408c6a6e9a8675 (patch)
treed97721b259dd7d057621d0e5370d85fff3b5907f
parentfec23f63115622cfc82ed92e5d9348cb81c69173 (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.c305
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. */
450static u32 skd_major; 450static u32 skd_major;
451 451
452static struct skd_device *skd_construct(struct pci_dev *pdev);
453static void skd_destruct(struct skd_device *skdev); 452static void skd_destruct(struct skd_device *skdev);
454static const struct block_device_operations skd_blockdev_ops; 453static const struct block_device_operations skd_blockdev_ops;
455static void skd_send_fitmsg(struct skd_device *skdev, 454static 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
4118static int skd_cons_skcomp(struct skd_device *skdev);
4119static int skd_cons_skmsg(struct skd_device *skdev);
4120static int skd_cons_skreq(struct skd_device *skdev);
4121static int skd_cons_skspcl(struct skd_device *skdev);
4122static int skd_cons_sksb(struct skd_device *skdev);
4123static struct fit_sg_descriptor *skd_cons_sg_list(struct skd_device *skdev,
4124 u32 n_sg,
4125 dma_addr_t *ret_dma_addr);
4126static int skd_cons_disk(struct skd_device *skdev);
4127
4128#define SKD_N_DEV_TABLE 16u
4129static u32 skd_next_devno;
4130
4131static 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
4201err_out:
4202 pr_debug("%s:%s:%d construct failed\n",
4203 skdev->name, __func__, __LINE__);
4204 skd_destruct(skdev);
4205 return NULL;
4206}
4207
4208static int skd_cons_skcomp(struct skd_device *skdev) 4117static 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
4204static 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
4295static int skd_cons_skreq(struct skd_device *skdev) 4233static 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
4468static 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
4497static int skd_cons_disk(struct skd_device *skdev) 4406static 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 ***************************************************************************** 4463static u32 skd_next_devno;
4555 * DESTRUCT (FREE)
4556 *****************************************************************************
4557 */
4558
4559static void skd_free_skcomp(struct skd_device *skdev);
4560static void skd_free_skmsg(struct skd_device *skdev);
4561static void skd_free_skreq(struct skd_device *skdev);
4562static void skd_free_skspcl(struct skd_device *skdev);
4563static void skd_free_sksb(struct skd_device *skdev);
4564static 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);
4567static void skd_free_disk(struct skd_device *skdev);
4568 4464
4569static void skd_destruct(struct skd_device *skdev) 4465static 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
4535err_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
4597static void skd_free_skcomp(struct skd_device *skdev) 4548static 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
4590static 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
4639static void skd_free_skreq(struct skd_device *skdev) 4603static 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
4735static 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
4748static void skd_free_disk(struct skd_device *skdev) 4699static 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
4715static 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 *****************************************************************************