Print this page
5255 uts shouldn't open-code ISP2

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/ib/adapters/tavor/tavor_rsrc.c
          +++ new/usr/src/uts/common/io/ib/adapters/tavor/tavor_rsrc.c
↓ open down ↓ 25 lines elided ↑ open up ↑
  26   26  
  27   27  /*
  28   28   * tavor_rsrc.c
  29   29   *    Tavor Resource Management Routines
  30   30   *
  31   31   *    Implements all the routines necessary for setup, teardown, and
  32   32   *    alloc/free of all Tavor resources, including those that are managed
  33   33   *    by Tavor hardware or which live in Tavor's direct attached DDR memory.
  34   34   */
  35   35  
       36 +#include <sys/sysmacros.h>
  36   37  #include <sys/types.h>
  37   38  #include <sys/conf.h>
  38   39  #include <sys/ddi.h>
  39   40  #include <sys/sunddi.h>
  40   41  #include <sys/modctl.h>
  41   42  #include <sys/vmem.h>
  42   43  #include <sys/bitmap.h>
  43   44  
  44   45  #include <sys/ib/adapters/tavor/tavor.h>
  45   46  
↓ open down ↓ 2832 lines elided ↑ open up ↑
2878 2879          uint_t  num_qp_per_mcg, max_qp_per_mcg, log2;
2879 2880  
2880 2881          TAVOR_TNF_ENTER(tavor_rsrc_mcg_entry_get_size);
2881 2882  
2882 2883          /*
2883 2884           * Round the configured number of QP per MCG to next larger
2884 2885           * power-of-2 size and update.
2885 2886           */
2886 2887          num_qp_per_mcg = state->ts_cfg_profile->cp_num_qp_per_mcg + 8;
2887 2888          log2 = highbit(num_qp_per_mcg);
2888      -        if ((num_qp_per_mcg & (num_qp_per_mcg - 1)) == 0) {
     2889 +        if (ISP2(num_qp_per_mcg)) {
2889 2890                  log2 = log2 - 1;
2890 2891          }
2891 2892          state->ts_cfg_profile->cp_num_qp_per_mcg = (1 << log2) - 8;
2892 2893  
2893 2894          /* Now make sure number of QP per MCG makes sense */
2894 2895          num_qp_per_mcg = state->ts_cfg_profile->cp_num_qp_per_mcg;
2895 2896          max_qp_per_mcg = (1 << state->ts_devlim.log_max_qp_mcg);
2896 2897          if (num_qp_per_mcg > max_qp_per_mcg) {
2897 2898                  TNF_PROBE_1(tavor_rsrc_mcg_getsz_toomany_qppermcg_fail,
2898 2899                      TAVOR_TNF_ERROR, "", tnf_uint, maxqpmcg, max_qp_per_mcg);
2899 2900                  TAVOR_TNF_EXIT(tavor_rsrc_mcg_entry_get_size);
2900 2901                  return (DDI_FAILURE);
2901 2902          }
2902 2903  
2903 2904          /* Return the (shift) size of an individual MCG HW entry */
2904 2905          *mcg_size_shift = log2 + 2;
2905 2906  
2906 2907          TAVOR_TNF_EXIT(tavor_rsrc_mcg_entry_get_size);
2907 2908          return (DDI_SUCCESS);
2908 2909  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX