Exemple #1
0
static inline void _free_pages_ok(unsigned long map_nr, unsigned long order)
{
	struct free_mem_area_struct *area = free_mem_area + order;
	unsigned long index = map_nr >> (1 + order);
	unsigned long mask = (~0UL) << order;


#define list(x) (g_mem_map+(x))

	map_nr &= mask;
	g_nr_free_pages -= mask;
	while (mask + (1 << (NR_MEM_LISTS-1))) {
		if (!test_and_change_bit(index, area->map))
			break;
		remove_mem_queue(area,list(map_nr ^ -mask));
		mask <<= 1;
		area++;
		index >>= 1;
		map_nr &= mask;
	}
	add_mem_queue(area, list(map_nr));

#undef list

}
static void ixgb_led_blink_callback(unsigned long data)
{
	struct ixgb_adapter *adapter = (struct ixgb_adapter *)data;

	if (test_and_change_bit(IXGB_LED_ON, &adapter->led_status))
		ixgb_led_off(&adapter->hw);
	else
		ixgb_led_on(&adapter->hw);

	mod_timer(&adapter->blink_timer, jiffies + IXGB_ID_INTERVAL);
}
static void
e1000_led_blink_callback(unsigned long data)
{
	struct e1000_adapter *adapter = (struct e1000_adapter *) data;

	if(test_and_change_bit(E1000_LED_ON, &adapter->led_status))
		e1000_led_off(&adapter->hw);
	else
		e1000_led_on(&adapter->hw);

	mod_timer(&adapter->blink_timer, jiffies + E1000_ID_INTERVAL);
}
Exemple #4
0
void buddy_put_free_pages(u32 addr, u8 order)
{
    u8 start_order;
    u32 bitmap_idx;
    struct buddy_area_s *area = &buddy_alloc.buddy_area[order];
    struct page_desc_s *page_desc;
    struct page_desc_s *page_buddy_desc;
    u32 page_idx = virt_to_page(addr);
    u32 page_buddy_idx;
    u32 page_mask;
    u32 flags;

    spin_lock_irqsave(&buddy_alloc.buddy_lock, flags);
    
    page_mask  = (~0UL) << order;
    for (start_order = order; start_order < BUDDY_ALLOC_MAX_AREAS; start_order++) {
	bitmap_idx = page_idx >> (start_order + 1);

	if (!test_and_change_bit(bitmap_idx, area->area_bitmap)) {
	    break;
	}
	
	page_buddy_idx  = page_idx ^ (1 + ~page_mask);
	page_buddy_desc = &system_pages[page_buddy_idx];
	list_del(&page_buddy_desc->page_list);
	area->free_units--;
	
	area++;
	page_mask <<= 1;
	page_idx &= page_mask;
    }

    page_desc = &system_pages[page_idx];
    list_add(&page_desc->page_list, &area->area_list);
    area->free_units++;
    
    spin_unlock_irqrestore(&buddy_alloc.buddy_lock, flags);
}