Date: Mon, 1 Apr 2013 13:27:50 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r248974 - in projects/camlock/sys/cam: . ata ctl scsi Message-ID: <201304011327.r31DRo5n076575@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mav Date: Mon Apr 1 13:27:49 2013 New Revision: 248974 URL: http://svnweb.freebsd.org/changeset/base/248974 Log: Remove per-SIM queue of free CCBs. Modified: projects/camlock/sys/cam/ata/ata_xpt.c projects/camlock/sys/cam/cam_sim.c projects/camlock/sys/cam/cam_sim.h projects/camlock/sys/cam/cam_xpt.c projects/camlock/sys/cam/ctl/scsi_ctl.c projects/camlock/sys/cam/scsi/scsi_xpt.c Modified: projects/camlock/sys/cam/ata/ata_xpt.c ============================================================================== --- projects/camlock/sys/cam/ata/ata_xpt.c Mon Apr 1 13:18:34 2013 (r248973) +++ projects/camlock/sys/cam/ata/ata_xpt.c Mon Apr 1 13:27:49 2013 (r248974) @@ -1549,11 +1549,6 @@ ata_alloc_device(struct cam_eb *bus, str device->serial_num = NULL; device->serial_num_len = 0; - /* - * XXX should be limited by number of CCBs this bus can - * do. - */ - bus->sim->max_ccbs += device->ccbq.devq_openings; /* Insertion sort into our target's device list */ cur_device = TAILQ_FIRST(&target->ed_entries); while (cur_device != NULL && cur_device->lun_id < lun_id) Modified: projects/camlock/sys/cam/cam_sim.c ============================================================================== --- projects/camlock/sys/cam/cam_sim.c Mon Apr 1 13:18:34 2013 (r248973) +++ projects/camlock/sys/cam/cam_sim.c Mon Apr 1 13:27:49 2013 (r248974) @@ -87,7 +87,6 @@ cam_sim_alloc(sim_action_func sim_action sim->flags = 0; sim->refcount = 1; sim->devq = queue; - sim->max_ccbs = 8; /* Reserve for management purposes. */ sim->mtx = mtx; if (mtx == &Giant) { sim->flags |= 0; @@ -97,7 +96,6 @@ cam_sim_alloc(sim_action_func sim_action callout_init(&sim->callout, 1); } - SLIST_INIT(&sim->ccb_freeq); TAILQ_INIT(&sim->sim_doneq); return (sim); @@ -106,7 +104,6 @@ cam_sim_alloc(sim_action_func sim_action void cam_sim_free(struct cam_sim *sim, int free_devq) { - union ccb *ccb; int error; sim->refcount--; @@ -117,10 +114,6 @@ cam_sim_free(struct cam_sim *sim, int fr KASSERT(sim->refcount == 0, ("sim->refcount == 0")); - while ((ccb = (union ccb *)SLIST_FIRST(&sim->ccb_freeq)) != NULL) { - SLIST_REMOVE_HEAD(&sim->ccb_freeq, xpt_links.sle); - xpt_free_ccb(ccb); - } if (free_devq) cam_simq_free(sim->devq); free(sim, M_CAMSIM); Modified: projects/camlock/sys/cam/cam_sim.h ============================================================================== --- projects/camlock/sys/cam/cam_sim.h Mon Apr 1 13:18:34 2013 (r248973) +++ projects/camlock/sys/cam/cam_sim.h Mon Apr 1 13:27:49 2013 (r248974) @@ -110,17 +110,6 @@ struct cam_sim { struct callout callout; struct cam_devq *devq; /* Device Queue to use for this SIM */ int refcount; /* References to the SIM. */ - - /* "Pool" of inactive ccbs managed by xpt_get_ccb and xpt_release_ccb */ - SLIST_HEAD(,ccb_hdr) ccb_freeq; - /* - * Maximum size of ccb pool. Modified as devices are added/removed - * or have their * opening counts changed. - */ - u_int max_ccbs; - /* Current count of allocated ccbs */ - u_int ccb_count; - }; #define CAM_SIM_LOCK(sim) mtx_lock((sim)->mtx); Modified: projects/camlock/sys/cam/cam_xpt.c ============================================================================== --- projects/camlock/sys/cam/cam_xpt.c Mon Apr 1 13:18:34 2013 (r248973) +++ projects/camlock/sys/cam/cam_xpt.c Mon Apr 1 13:27:49 2013 (r248974) @@ -3756,13 +3756,7 @@ xpt_release_ccb(union ccb *free_ccb) cam_ccbq_resize(&device->ccbq, device->ccbq.dev_openings + device->ccbq.dev_active); } - if (sim->ccb_count > sim->max_ccbs) { - xpt_free_ccb(free_ccb); - sim->ccb_count--; - } else { - SLIST_INSERT_HEAD(&sim->ccb_freeq, &free_ccb->ccb_h, - xpt_links.sle); - } + xpt_free_ccb(free_ccb); xpt_run_dev_allocq(device); } @@ -4326,22 +4320,11 @@ static union ccb * xpt_get_ccb(struct cam_ed *device) { union ccb *new_ccb; - struct cam_sim *sim; - sim = device->sim; - if ((new_ccb = (union ccb *)SLIST_FIRST(&sim->ccb_freeq)) == NULL) { - new_ccb = xpt_alloc_ccb_nowait(); - if (new_ccb == NULL) { - return (NULL); - } - if ((sim->flags & CAM_SIM_MPSAFE) == 0) - callout_handle_init(&new_ccb->ccb_h.timeout_ch); - SLIST_INSERT_HEAD(&sim->ccb_freeq, &new_ccb->ccb_h, - xpt_links.sle); - sim->ccb_count++; - } + new_ccb = malloc(sizeof(*new_ccb), M_CAMCCB, M_NOWAIT); + if (new_ccb == NULL) + return (NULL); cam_ccbq_take_opening(&device->ccbq); - SLIST_REMOVE_HEAD(&sim->ccb_freeq, xpt_links.sle); return (new_ccb); } @@ -4431,7 +4414,6 @@ xpt_alloc_device_default(struct cam_eb * device->mintags = 1; device->maxtags = 1; - bus->sim->max_ccbs += device->ccbq.devq_openings; cur_device = TAILQ_FIRST(&target->ed_entries); while (cur_device != NULL && cur_device->lun_id < lun_id) cur_device = TAILQ_NEXT(cur_device, links); @@ -4525,7 +4507,6 @@ xpt_release_device(struct cam_ed *device TAILQ_REMOVE(&device->target->ed_entries, device,links); device->target->generation++; - device->target->bus->sim->max_ccbs -= device->ccbq.devq_openings; /* Release our slot in the devq */ devq = device->target->bus->sim->devq; cam_devq_resize(devq, devq->send_queue.array_size - 1); @@ -4565,8 +4546,6 @@ xpt_dev_ccbq_resize(struct cam_path *pat if ((dev->flags & CAM_DEV_TAG_AFTER_COUNT) != 0 || (dev->inq_flags & SID_CmdQue) != 0) dev->tag_saved_openings = newopenings; - /* Adjust the global limit */ - dev->sim->max_ccbs += diff; return (result); } Modified: projects/camlock/sys/cam/ctl/scsi_ctl.c ============================================================================== --- projects/camlock/sys/cam/ctl/scsi_ctl.c Mon Apr 1 13:18:34 2013 (r248973) +++ projects/camlock/sys/cam/ctl/scsi_ctl.c Mon Apr 1 13:27:49 2013 (r248974) @@ -2063,12 +2063,6 @@ ctlfe_dump_sim(struct cam_sim *sim) printf("%s%d: max tagged openings: %d, max dev openings: %d\n", sim->sim_name, sim->unit_number, sim->max_tagged_dev_openings, sim->max_dev_openings); - printf("%s%d: max_ccbs: %u, ccb_count: %u\n", - sim->sim_name, sim->unit_number, - sim->max_ccbs, sim->ccb_count); - printf("%s%d: ccb_freeq is %sempty\n", - sim->sim_name, sim->unit_number, - (SLIST_FIRST(&sim->ccb_freeq) == NULL) ? "" : "NOT "); printf("\n"); } Modified: projects/camlock/sys/cam/scsi/scsi_xpt.c ============================================================================== --- projects/camlock/sys/cam/scsi/scsi_xpt.c Mon Apr 1 13:18:34 2013 (r248973) +++ projects/camlock/sys/cam/scsi/scsi_xpt.c Mon Apr 1 13:27:49 2013 (r248974) @@ -2331,11 +2331,6 @@ scsi_alloc_device(struct cam_eb *bus, st device->supported_vpds = NULL; device->supported_vpds_len = 0; - /* - * XXX should be limited by number of CCBs this bus can - * do. - */ - bus->sim->max_ccbs += device->ccbq.devq_openings; /* Insertion sort into our target's device list */ cur_device = TAILQ_FIRST(&target->ed_entries); while (cur_device != NULL && cur_device->lun_id < lun_id)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304011327.r31DRo5n076575>