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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/ib/adapters/hermon/hermon_rsrc.c
          +++ new/usr/src/uts/common/io/ib/adapters/hermon/hermon_rsrc.c
↓ open down ↓ 24 lines elided ↑ open up ↑
  25   25  
  26   26  /*
  27   27   * hermon_rsrc.c
  28   28   *    Hermon Resource Management Routines
  29   29   *
  30   30   *    Implements all the routines necessary for setup, teardown, and
  31   31   *    alloc/free of all Hermon resources, including those that are managed
  32   32   *    by Hermon hardware or which live in Hermon's direct attached DDR memory.
  33   33   */
  34   34  
       35 +#include <sys/sysmacros.h>
  35   36  #include <sys/types.h>
  36   37  #include <sys/conf.h>
  37   38  #include <sys/ddi.h>
  38   39  #include <sys/sunddi.h>
  39   40  #include <sys/modctl.h>
  40   41  #include <sys/vmem.h>
  41   42  #include <sys/bitmap.h>
  42   43  
  43   44  #include <sys/ib/adapters/hermon/hermon.h>
  44   45  
↓ open down ↓ 2614 lines elided ↑ open up ↑
2659 2660  hermon_rsrc_mcg_entry_get_size(hermon_state_t *state, uint_t *mcg_size_shift)
2660 2661  {
2661 2662          uint_t  num_qp_per_mcg, max_qp_per_mcg, log2;
2662 2663  
2663 2664          /*
2664 2665           * Round the configured number of QP per MCG to next larger
2665 2666           * power-of-2 size and update.
2666 2667           */
2667 2668          num_qp_per_mcg = state->hs_cfg_profile->cp_num_qp_per_mcg + 8;
2668 2669          log2 = highbit(num_qp_per_mcg);
2669      -        if ((num_qp_per_mcg & (num_qp_per_mcg - 1)) == 0) {
     2670 +        if (ISP2(num_qp_per_mcg)) {
2670 2671                  log2 = log2 - 1;
2671 2672          }
2672 2673          state->hs_cfg_profile->cp_num_qp_per_mcg = (1 << log2) - 8;
2673 2674  
2674 2675          /* Now make sure number of QP per MCG makes sense */
2675 2676          num_qp_per_mcg = state->hs_cfg_profile->cp_num_qp_per_mcg;
2676 2677          max_qp_per_mcg = (1 << state->hs_devlim.log_max_qp_mcg);
2677 2678          if (num_qp_per_mcg > max_qp_per_mcg) {
2678 2679                  return (DDI_FAILURE);
2679 2680          }
2680 2681  
2681 2682          /* Return the (shift) size of an individual MCG HW entry */
2682 2683          *mcg_size_shift = log2 + 2;
2683 2684  
2684 2685          return (DDI_SUCCESS);
2685 2686  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX