Example #1
0
void mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, int qpn)
{
	struct mlx4_port_info *info = &mlx4_priv(dev)->port[port];
	struct mlx4_mac_table *table = &info->mac_table;
	int index = qpn - info->base_qpn;
	struct mlx4_mac_entry *entry;

	if (dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_UC_STEER) {
		entry = radix_tree_lookup(&info->mac_tree, qpn);
		if (entry) {
			mlx4_uc_steer_release(dev, port, entry->mac, qpn, 1);
			radix_tree_delete(&info->mac_tree, qpn);
			index = find_index(dev, table, entry->mac);
			kfree(entry);
		}
	}

	mutex_lock(&table->mutex);

	if (validate_index(dev, table, index))
		goto out;

	/* Check whether this address has reference count */
	if (!(--table->refs[index])) {
		table->entries[index] = 0;
		mlx4_set_port_mac_table(dev, port, table->entries);
		--table->total;
	}
out:
	mutex_unlock(&table->mutex);
}
Example #2
0
void mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, int qpn)
{
	struct mlx4_port_info *info = &mlx4_priv(dev)->port[port];
	struct mlx4_mac_table *table = &info->mac_table;
	int index = qpn - info->base_qpn;
	struct mlx4_mac_entry *entry;

	if (dev->caps.vep_uc_steering) {
		entry = radix_tree_lookup(&info->mac_tree, qpn);
		if (entry) {
			mlx4_uc_steer_release(dev, port, entry->mac, qpn, 1);
			radix_tree_delete(&info->mac_tree, qpn);
			index = find_index(dev, table, entry->mac);
			kfree(entry);
		}
	}

	mutex_lock(&table->mutex);

	if (validate_index(dev, table, index))
		goto out;

	table->entries[index] = 0;
	mlx4_set_port_mac_table(dev, port, table->entries);
	--table->total;
out:
	mutex_unlock(&table->mutex);
}
Example #3
0
	bool bin_index_t::dir_node::next(data_t& key,data_t& val) const
	{
		validate_key_len(key);
		validate_index();
		
		data_t head(key.begin(),key.begin()+parent.dir_key_len);
		data_t tail(key.begin()+parent.dir_key_len,key.end());

		datas_t::const_iterator it=std::lower_bound(indexes.begin(),indexes.end(),head,data_less_pr());
		if(it==indexes.end())return false;

		if(*it==head)
		{
			validate_sub(head);
			if(sub_node->next(tail,val))
			{
				key=head;
				key.insert(key.end(),tail.begin(),tail.end());
				return true;
			}
		}

		++it;
		if(it==indexes.end())return false;
		head=*it;

		validate_sub(head);
		if(!sub_node->first(tail,val))return false;

		key=head;
		key.insert(key.end(),tail.begin(),tail.end());
		return true;
	}
Example #4
0
static VALUE rb_bitset_aset(VALUE self, VALUE index, VALUE value) {
    Bitset * bs = get_bitset(self);
    int idx = NUM2INT(index);
    validate_index(bs, idx);
    assign_bit(bs, idx, value);
    return Qtrue;
}
/******************************************************************************
 * private メソッド
 *****************************************************************************/
void UploadItemIterator::init(apr_pool_t *pool, UploadItemList *item_list,
                              apr_size_t start_index, apr_size_t end_index,
                              int (*cmp)(const UploadItem *a, const UploadItem *b))
{
    apr_size_t list_size;

    validate_index(item_list, &start_index, &end_index);
    size_= end_index - start_index;

    if (size_ == 0) {
        return;
    }

    // MEMO: 無駄が多いけど,ローカルに全部コピーしてソート

    list_size = item_list->size();
    APR_PALLOC(header_list_, UploadItem::header_t *, pool,
               sizeof(UploadItem::header_t) * list_size);
    memcpy(header_list_, item_list->get_by_index(0),
           sizeof(UploadItem::header_t) * list_size);

    qsort(header_list_, list_size, sizeof(UploadItem),
          reinterpret_cast<int (*)(const void *a, const void *b)>(cmp));

    header_list_ += start_index;
}
Example #6
0
static VALUE rb_bitset_clear(int argc, VALUE * argv, VALUE self) {
    int i;
    Bitset * bs = get_bitset(self);
    for(i = 0; i < argc; i++) {
        VALUE index = argv[i];
        int idx = NUM2INT(index);
        validate_index(bs, idx);
        clear_bit(bs, idx);
    }
    return Qtrue;
}
/*--------------------------------------------------------------------------------------
  previous()
  Select previous Menu
	return the current selected menu 
--------------------------------------------------------------------------------------*/
int MenuController::previous()
{
	int new_index = current_index - 1;
		
	if( validate_index(new_index) )
	{
		current_index = new_index;
	}
	
	return current_index;
}
/*--------------------------------------------------------------------------------------
  next()
  Select next Menu
	return the current selected menu 
--------------------------------------------------------------------------------------*/
int MenuController::next()
{
	int new_index = current_index + 1;
	
	if( validate_index(new_index) )
	{
		current_index = new_index;
	}
	
	return current_index;
}
Example #9
0
///////////////////////////////////////////////////////////////////////////////////
//  dir_node
//
	bool bin_index_t::dir_node::get(const data_t& key,data_t& val) const
	{
		validate_key_len(key);
		validate_index();
		
		data_t head(key.begin(),key.begin()+parent.dir_key_len);
		data_t tail(key.begin()+parent.dir_key_len,key.end());

		if(!std::binary_search(indexes.begin(),indexes.end(),head,data_less_pr()))
			return false;

		validate_sub(head);

		return sub_node->get(tail,val);
	}
void UploadItemIterator::init(apr_pool_t *pool, UploadItemList *item_list,
                              apr_size_t start_index, apr_size_t end_index)
{
    validate_index(item_list, &start_index, &end_index);
    size_= end_index - start_index;

    if (size_ == 0) {
        return;
    }

    APR_PALLOC(header_list_, UploadItem::header_t *, pool,
               sizeof(UploadItem::header_t)*size_);
    memcpy(header_list_, item_list->get_by_index(start_index),
           sizeof(UploadItem::header_t) * size_);
}
Example #11
0
	bool bin_index_t::dir_node::set(const data_t& key,const data_t& val)
	{
		validate_key_len(key);
		validate_index();

		data_t head(key.begin(),key.begin()+parent.dir_key_len);
		data_t tail(key.begin()+parent.dir_key_len,key.end());

		bool already_exists=std::binary_search(indexes.begin(),indexes.end(),head,data_less_pr());

        if(!already_exists)create_text_child(head);
		validate_sub(head);

		bool r=sub_node->set(tail,val);
		return r;
	}
Example #12
0
	bool bin_index_t::dir_node::first(data_t& key,data_t& val) const
	{
		validate_index();

		if(indexes.empty())return false;

		const data_t& head=indexes.front();
		validate_sub(head);

		data_t tail;
		if(!sub_node->first(tail,val))return false;
		
		key=head;
		key.insert(key.end(),tail.begin(),tail.end());

		return true;
	}
/******************************************************************************
 * public メソッド
 *****************************************************************************/
ThumbnailIterator::ThumbnailIterator(apr_pool_t *pool,
                                     UploadItemManager *item_manager,
                                     apr_size_t start_index,
                                     apr_size_t end_index)
  : thumbnail_list_(NULL),
    curr_index_(0)
{
    ThumbnailList *thumbnail_list;
    ReadLocker manager_locker(item_manager->lock_);

    thumbnail_list = item_manager->thumbnail_list_;

    validate_index(thumbnail_list, &start_index, &end_index);
    size_= end_index - start_index;

    if (size_ != 0) {
        APR_PALLOC(thumbnail_list_, apr_size_t *, pool,
                   sizeof(apr_size_t)*(end_index-start_index));
        memcpy(thumbnail_list_, thumbnail_list->get_by_index(start_index),
               sizeof(apr_size_t)*size_);
    }
Example #14
0
int mlx4_replace_mac(struct mlx4_dev *dev, u8 port, int qpn, u64 new_mac, u8 wrap)
{
	struct mlx4_port_info *info = &mlx4_priv(dev)->port[port];
	struct mlx4_mac_table *table = &info->mac_table;
	int index = qpn - info->base_qpn;
	struct mlx4_mac_entry *entry;
	int err;

	if (dev->caps.vep_uc_steering) {
		entry = radix_tree_lookup(&info->mac_tree, qpn);
		if (!entry)
			return -EINVAL;
		index = find_index(dev, table, entry->mac);
		mlx4_uc_steer_release(dev, port, entry->mac, qpn, 0);
		entry->mac = new_mac;
		err = mlx4_uc_steer_add(dev, port, entry->mac, &qpn, 0);
		if (err || index < 0)
			return err;
	}

	mutex_lock(&table->mutex);

	err = validate_index(dev, table, index);
	if (err)
		goto out;

	table->entries[index] = cpu_to_be64(new_mac | MLX4_MAC_VALID);

	err = mlx4_set_port_mac_table(dev, port, table->entries);
	if (unlikely(err)) {
		mlx4_err(dev, "Failed adding MAC: 0x%llx\n", (unsigned long long) new_mac);
		table->entries[index] = 0;
	}
out:
	mutex_unlock(&table->mutex);
	return err;
}
Example #15
0
static VALUE rb_bitset_aref(VALUE self, VALUE index) {
    Bitset * bs = get_bitset(self);
    int idx = NUM2INT(index);
    validate_index(bs, idx);
    return get_bit(bs, idx) > 0 ? Qtrue : Qfalse;
}
boolean MenuController::validate_option(int index, int option)
{	
	return validate_index(index) && (option >=  0) && (option < options[index]);
}