[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 2/3] x86: add domctl cmd to set/get CDP code/data CBM
> + bool_t cdp_enabled = cdp_is_enabled(socket, cdp_socket_enable); > > if ( IS_ERR(info) ) > return PTR_ERR(info); > > - *cbm = info->cos_to_cbm[d->arch.psr_cos_ids[socket]].cbm; > + switch ( type ) > + { > + case PSR_CBM_TYPE_L3: > + if ( type == PSR_CBM_TYPE_L3 && cdp_enabled ) 'type == PSR_CBM_TYPE_L3' here seems redundant. > + return -EXDEV; > + *cbm = info->cos_to_cbm[d->arch.psr_cos_ids[socket]].cbm; > + break; ... > -int psr_set_l3_cbm(struct domain *d, unsigned int socket, uint64_t cbm) > +static int find_cos(struct psr_cat_cbm *map, int cos_max, cos_max should be unsigned. > + uint64_t cbm_code, uint64_t cbm_data, bool_t cdp_enabled) > { > - unsigned int old_cos, cos; > - struct psr_cat_cbm *map, *found = NULL; > + unsigned int cos; > + > + for ( cos = 0; cos <= cos_max; cos++ ) > + { > + if( map[cos].ref && > + ((!cdp_enabled && map[cos].cbm == cbm_code) || > + (cdp_enabled && map[cos].code == cbm_code && > + map[cos].data == cbm_data))) > + return cos; > + } > + ... > + else > + { > + bool_t need_write = 1; > > - if ( ret ) > + cos = pick_avail_cos(map, cos_max, old_cos); > + if ( cos < 0 ) > { > spin_unlock(&info->cbm_lock); > - return ret; > + return cos; > + } > + > + /* We try to avoid writing MSR. */ > + if ( cdp_enabled ) > + { > + if ( map[cos].code == cbm_code && > + map[cos].data == cbm_data ) > + need_write = 0; > + } > + else > + need_write = !(map[cos].cbm == cbm_code); > + need_write here seems useless, you can put it in inline below. > + if ( need_write ) > + { > + ret = write_l3_cbm(socket, cos, cbm_code, cbm_data, cdp_enabled); > + if ( ret ) > + { > + spin_unlock(&info->cbm_lock); > + return ret; > + } > + map[cos].code = cbm_code; > + map[cos].data = cbm_data; > } > - found->cbm = cbm; > } Chao _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |