View | Details | Raw Unified | Return to bug 9966 | Differences between
and this patch

Collapse All | Expand All

(-)linux-2.6/kernel/power/snapshot.c (-6 / +26 lines)
Lines 447-453 static void memory_bm_free(struct memory Link Here
447
 *	of @bm->cur_zone_bm are updated.
447
 *	of @bm->cur_zone_bm are updated.
448
 */
448
 */
449
449
450
static void memory_bm_find_bit(struct memory_bitmap *bm, unsigned long pfn,
450
static int memory_bm_find_bit(struct memory_bitmap *bm, unsigned long pfn,
451
				void **addr, unsigned int *bit_nr)
451
				void **addr, unsigned int *bit_nr)
452
{
452
{
453
	struct zone_bitmap *zone_bm;
453
	struct zone_bitmap *zone_bm;
Lines 461-467 static void memory_bm_find_bit(struct me Link Here
461
		while (pfn < zone_bm->start_pfn || pfn >= zone_bm->end_pfn) {
461
		while (pfn < zone_bm->start_pfn || pfn >= zone_bm->end_pfn) {
462
			zone_bm = zone_bm->next;
462
			zone_bm = zone_bm->next;
463
463
464
			BUG_ON(!zone_bm);
464
			if (!zone_bm)
465
				return -EFAULT;
465
		}
466
		}
466
		bm->cur.zone_bm = zone_bm;
467
		bm->cur.zone_bm = zone_bm;
467
	}
468
	}
Lines 479-501 static void memory_bm_find_bit(struct me Link Here
479
	pfn -= bb->start_pfn;
480
	pfn -= bb->start_pfn;
480
	*bit_nr = pfn % BM_BITS_PER_CHUNK;
481
	*bit_nr = pfn % BM_BITS_PER_CHUNK;
481
	*addr = bb->data + pfn / BM_BITS_PER_CHUNK;
482
	*addr = bb->data + pfn / BM_BITS_PER_CHUNK;
483
	return 0;
482
}
484
}
483
485
484
static void memory_bm_set_bit(struct memory_bitmap *bm, unsigned long pfn)
486
static void memory_bm_set_bit(struct memory_bitmap *bm, unsigned long pfn)
485
{
487
{
486
	void *addr;
488
	void *addr;
487
	unsigned int bit;
489
	unsigned int bit;
490
	int error;
488
491
489
	memory_bm_find_bit(bm, pfn, &addr, &bit);
492
	error = memory_bm_find_bit(bm, pfn, &addr, &bit);
493
	BUG_ON(error);
490
	set_bit(bit, addr);
494
	set_bit(bit, addr);
491
}
495
}
492
496
497
static int mem_bm_set_bit_check(struct memory_bitmap *bm, unsigned long pfn)
498
{
499
	void *addr;
500
	unsigned int bit;
501
	int error;
502
503
	error = memory_bm_find_bit(bm, pfn, &addr, &bit);
504
	if (!error)
505
		set_bit(bit, addr);
506
	return error;
507
}
508
493
static void memory_bm_clear_bit(struct memory_bitmap *bm, unsigned long pfn)
509
static void memory_bm_clear_bit(struct memory_bitmap *bm, unsigned long pfn)
494
{
510
{
495
	void *addr;
511
	void *addr;
496
	unsigned int bit;
512
	unsigned int bit;
513
	int error;
497
514
498
	memory_bm_find_bit(bm, pfn, &addr, &bit);
515
	error = memory_bm_find_bit(bm, pfn, &addr, &bit);
516
	BUG_ON(error);
499
	clear_bit(bit, addr);
517
	clear_bit(bit, addr);
500
}
518
}
501
519
Lines 503-510 static int memory_bm_test_bit(struct mem Link Here
503
{
521
{
504
	void *addr;
522
	void *addr;
505
	unsigned int bit;
523
	unsigned int bit;
524
	int error;
506
525
507
	memory_bm_find_bit(bm, pfn, &addr, &bit);
526
	error = memory_bm_find_bit(bm, pfn, &addr, &bit);
527
	BUG_ON(error);
508
	return test_bit(bit, addr);
528
	return test_bit(bit, addr);
509
}
529
}
510
530
Lines 710-716 static void mark_nosave_pages(struct mem Link Here
710
730
711
		for (pfn = region->start_pfn; pfn < region->end_pfn; pfn++)
731
		for (pfn = region->start_pfn; pfn < region->end_pfn; pfn++)
712
			if (pfn_valid(pfn))
732
			if (pfn_valid(pfn))
713
				memory_bm_set_bit(bm, pfn);
733
				mem_bm_set_bit_check(bm, pfn);
714
	}
734
	}
715
}
735
}
716
736

Return to bug 9966