Print this page
4031 scsa1394 violates DDI scsi_pkt(9S) allocation rules

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/sys/1394/targets/scsa1394/cmd.h
          +++ new/usr/src/uts/common/sys/1394/targets/scsa1394/cmd.h
↓ open down ↓ 18 lines elided ↑ open up ↑
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   */
  25   25  
  26   26  #ifndef _SYS_1394_TARGETS_SCSA1394_CMD_H
  27   27  #define _SYS_1394_TARGETS_SCSA1394_CMD_H
  28   28  
  29      -#pragma ident   "%Z%%M% %I%     %E% SMI"
  30      -
  31   29  /*
  32   30   * scsa1394 command
  33   31   */
  34   32  
  35   33  #include <sys/scsi/scsi_types.h>
  36   34  #include <sys/1394/targets/scsa1394/sbp2.h>
  37   35  #include <sys/note.h>
  38   36  
  39   37  #ifdef  __cplusplus
  40   38  extern "C" {
  41   39  #endif
  42   40  
  43      -/* preferred pkt_private length in 64-bit quantities */
  44      -#ifdef  _LP64
  45      -#define SCSA1394_CMD_PRIV_SIZE  2
  46      -#else /* _ILP32 */
  47      -#define SCSA1394_CMD_PRIV_SIZE  1
  48      -#endif
  49      -#define SCSA1394_CMD_PRIV_LEN   (SCSA1394_CMD_PRIV_SIZE * sizeof (uint64_t))
  50      -
  51   41  /* entry describing a page table segment */
  52   42  typedef struct scsa1394_cmd_seg {
  53   43          size_t                  ss_len;
  54   44          uint64_t                ss_daddr;
  55   45          uint64_t                ss_baddr;
  56   46          t1394_addr_handle_t     ss_addr_hdl;
  57   47  } scsa1394_cmd_seg_t;
  58   48  
  59   49  /* command packet structure */
  60   50  typedef struct scsa1394_cmd {
  61   51          sbp2_task_t             sc_task;        /* corresponding SBP-2 task */
  62   52          struct scsa1394_lun     *sc_lun;        /* lun it belongs to */
  63   53          int                     sc_state;       /* command state */
  64   54          int                     sc_flags;       /* command flags */
  65   55          struct buf              *sc_bp;         /* data buffer */
  66   56          struct scsi_pkt         *sc_pkt;        /* corresponding scsi pkt */
  67      -        size_t                  sc_cdb_len;
  68      -        size_t                  sc_cdb_actual_len;
  69      -        size_t                  sc_scb_len;
  70      -        size_t                  sc_priv_len;
  71      -        uchar_t                 sc_cdb[SCSI_CDB_SIZE];
  72      -        uchar_t                 sc_pkt_cdb[SCSI_CDB_SIZE];
  73      -        struct scsi_arq_status  sc_scb;
  74      -        uint64_t                sc_priv[SCSA1394_CMD_PRIV_SIZE];
       57 +        size_t                  sc_orig_cdblen;
  75   58          clock_t                 sc_start_time;
  76   59          int                     sc_timeout;
  77   60  
  78   61          /* DMA: command ORB */
  79   62          ddi_dma_handle_t        sc_orb_dma_hdl;
  80   63          ddi_acc_handle_t        sc_orb_acc_hdl;
  81   64          ddi_dma_cookie_t        sc_orb_dmac;
  82   65          t1394_addr_handle_t     sc_orb_addr_hdl;
  83   66  
  84   67          /* DMA: data buffer */
↓ open down ↓ 17 lines elided ↑ open up ↑
 102   85          uint64_t                sc_pt_baddr;
 103   86          t1394_addr_handle_t     sc_pt_addr_hdl;
 104   87          size_t                  sc_pt_ent_alloc; /* # allocated entries */
 105   88          int                     sc_pt_cmd_size;
 106   89  
 107   90          /* for symbios mode only */
 108   91          int                     sc_lba;         /* start LBA */
 109   92          int                     sc_blk_size;    /* xfer block size */
 110   93          size_t                  sc_total_blks;  /* total xfer blocks */
 111   94          size_t                  sc_resid_blks;  /* blocks left */
 112      -
 113      -        struct scsi_pkt         sc_scsi_pkt;    /* must be last */
 114      -                                                /* embedded SCSI packet */
 115      -                                                /* ... scsi_pkt_size() */
 116   95  } scsa1394_cmd_t;
 117      -#define SCSA1394_CMD_SIZE       (sizeof (struct scsa1394_cmd) - \
 118      -                                sizeof (struct scsi_pkt) + scsi_pkt_size())
 119   96  
 120   97  _NOTE(SCHEME_PROTECTS_DATA("unique per task", { scsa1394_cmd scsa1394_cmd_seg
 121   98      scsi_pkt scsi_inquiry scsi_extended_sense scsi_cdb scsi_arq_status }))
 122   99  
 123  100  #define PKT2CMD(pktp)   ((scsa1394_cmd_t *)((pktp)->pkt_ha_private))
 124      -#define CMD2PKT(cmdp)   ((struct scsi_pkt *)((cmdp)->sc_pkt))
      101 +#define CMD2PKT(cmdp)   ((cmdp)->sc_pkt)
 125  102  #define TASK2CMD(task)  ((scsa1394_cmd_t *)(task)->ts_drv_priv)
 126  103  #define CMD2TASK(cmdp)  ((sbp2_task_t *)&(cmdp)->sc_task)
 127  104  
 128  105  /* state */
 129  106  enum {
 130  107          SCSA1394_CMD_INIT,
 131  108          SCSA1394_CMD_START,
 132  109          SCSA1394_CMD_STATUS
 133  110  };
 134  111  
 135  112  /* flags */
 136  113  enum {
 137      -        SCSA1394_CMD_CDB_EXT            = 0x0001,
 138      -        SCSA1394_CMD_PRIV_EXT           = 0x0002,
 139      -        SCSA1394_CMD_SCB_EXT            = 0x0004,
 140      -        SCSA1394_CMD_EXT                = (SCSA1394_CMD_CDB_EXT |
 141      -                                            SCSA1394_CMD_PRIV_EXT |
 142      -                                            SCSA1394_CMD_SCB_EXT),
 143      -
 144  114          SCSA1394_CMD_DMA_CDB_VALID      = 0x0008,
 145  115          SCSA1394_CMD_DMA_BUF_BIND_VALID = 0x0010,
 146  116          SCSA1394_CMD_DMA_BUF_PT_VALID   = 0x0020,
 147  117          SCSA1394_CMD_DMA_BUF_ADDR_VALID = 0x0040,
 148  118          SCSA1394_CMD_DMA_BUF_VALID      = (SCSA1394_CMD_DMA_BUF_BIND_VALID |
 149  119                                              SCSA1394_CMD_DMA_BUF_ADDR_VALID |
 150  120                                              SCSA1394_CMD_DMA_BUF_PT_VALID),
 151  121          SCSA1394_CMD_DMA_BUF_MAPIN      = 0x0080,
 152  122  
 153  123          SCSA1394_CMD_READ               = 0x0100,
↓ open down ↓ 12 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX