I checked kernel code again "memory size mismatch", before v3.11, it checks num_physpages global variable should constant between hibernating and resuming. After v3.11, kernel code changed to use get_num_physpages(), the return value is from the sum of all node's totalpages. Checked each dmesg attached on this bug, found v3.12: Description: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.12.36-desktop-bv1 root=UUID=2d968229- [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177255 Comment#28: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.12.37-desktop-bv2 root=UUID=2d968229- [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177255 Comment#31: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.12.37-desktop-bv2 root=UUID=2d968229- [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177255 Comment#36: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.12.38-desktop-bv1 root=UUID=2d968229- [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177256 [ 3.334138] PM: Image mismatch: memory size v3.18: Comment#5: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.18.3-1.gc3e148f-desktop [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177255 Comment#6: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.18.3-1.gc3e148f-desktop [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177255 Comment#10: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.18.3-1.gc3e148f-desktop [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177256 [ 3.834831] PM: Image mismatch: memory size Comment#20: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.18.5-desktop-bv2 root=UUID=2d968229- [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177255 Comment#21: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.18.5-desktop-bv2 root=UUID=2d968229- [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177255 Comment#23: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.18.5-1.gf378da4-desktop [ 0.000000] e820: last_pfn = 0x430000 max_arch_pfn = 0x400000000 [ 0.000000] e820: last_pfn = 0xcc000 max_arch_pfn = 0x400000000 [ 0.000000] On node 0 totalpages: 4177256 [ 3.847437] PM: Image mismatch: memory size As the above part of dmesg, no matter v3.12 or v3.18 kernel, the last_pfn of e820 always keeps in 0x430000/0xcc000. But the totalpages of node 0 normally is 4177255, but sometimes 4177256. The memory size mismatch always happened when totalpages=4177256. Need more detail trace the code of how to calculate totalpages of node, I suggest open another bug against this new found issue.