Author: mav
Date: Sat Jun  9 07:28:11 2012
New Revision: 236782
URL: http://svn.freebsd.org/changeset/base/236782

Log:
  MFC r236234:
  Allow to change number of openings (used tags) for ATA/SATA devices
  via `camcontrol tags ... -N ...`.  There is no need to tune it in
  usual cases, but some users want to have it for debugging purposes.

Modified:
  stable/9/sys/cam/ata/ata_xpt.c
  stable/9/sys/cam/cam_xpt.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/cam/ata/ata_xpt.c
==============================================================================
--- stable/9/sys/cam/ata/ata_xpt.c      Sat Jun  9 07:22:50 2012        
(r236781)
+++ stable/9/sys/cam/ata/ata_xpt.c      Sat Jun  9 07:28:11 2012        
(r236782)
@@ -65,6 +65,7 @@ struct ata_quirk_entry {
        struct scsi_inquiry_pattern inq_pat;
        u_int8_t quirks;
 #define        CAM_QUIRK_MAXTAGS       0x01
+       u_int mintags;
        u_int maxtags;
 };
 
@@ -153,7 +154,7 @@ static struct ata_quirk_entry ata_quirk_
                  T_ANY, SIP_MEDIA_REMOVABLE|SIP_MEDIA_FIXED,
                  /*vendor*/"*", /*product*/"*", /*revision*/"*"
                },
-               /*quirks*/0, /*maxtags*/0
+               /*quirks*/0, /*mintags*/0, /*maxtags*/0
        },
 };
 
@@ -1019,7 +1020,8 @@ noerror:
                        path->device->flags |= CAM_DEV_IDENTIFY_DATA_VALID;
                }
                if (ident_buf->satacapabilities & ATA_SUPPORT_NCQ) {
-                       path->device->mintags = path->device->maxtags =
+                       path->device->mintags = 2;
+                       path->device->maxtags =
                            ATA_QUEUE_LEN(ident_buf->queue) + 1;
                }
                ata_find_quirk(path->device);
@@ -1355,8 +1357,10 @@ ata_find_quirk(struct cam_ed *device)
 
        quirk = (struct ata_quirk_entry *)match;
        device->quirk = quirk;
-       if (quirk->quirks & CAM_QUIRK_MAXTAGS)
-               device->mintags = device->maxtags = quirk->maxtags;
+       if (quirk->quirks & CAM_QUIRK_MAXTAGS) {
+               device->mintags = quirk->mintags;
+               device->maxtags = quirk->maxtags;
+       }
 }
 
 typedef struct {

Modified: stable/9/sys/cam/cam_xpt.c
==============================================================================
--- stable/9/sys/cam/cam_xpt.c  Sat Jun  9 07:22:50 2012        (r236781)
+++ stable/9/sys/cam/cam_xpt.c  Sat Jun  9 07:28:11 2012        (r236782)
@@ -2905,17 +2905,13 @@ xpt_action_default(union ccb *start_ccb)
 
                if ((crs->release_flags & RELSIM_ADJUST_OPENINGS) != 0) {
 
-                       if (INQ_DATA_TQ_ENABLED(&dev->inq_data)) {
-                               /* Don't ever go below one opening */
-                               if (crs->openings > 0) {
-                                       xpt_dev_ccbq_resize(path,
-                                                           crs->openings);
-
-                                       if (bootverbose) {
-                                               xpt_print(path,
-                                                   "tagged openings now %d\n",
-                                                   crs->openings);
-                                       }
+                       /* Don't ever go below one opening */
+                       if (crs->openings > 0) {
+                               xpt_dev_ccbq_resize(path, crs->openings);
+                               if (bootverbose) {
+                                       xpt_print(path,
+                                           "number of openings is now %d\n",
+                                           crs->openings);
                                }
                        }
                }
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to