|
@@ -195,8 +195,29 @@ error:
|
|
|
static void allocate_buf_for_compression(void)
|
|
|
{
|
|
|
size_t size;
|
|
|
+ size_t cmpr;
|
|
|
+
|
|
|
+ switch (psinfo->bufsize) {
|
|
|
+ /* buffer range for efivars */
|
|
|
+ case 1000 ... 2000:
|
|
|
+ cmpr = 56;
|
|
|
+ break;
|
|
|
+ case 2001 ... 3000:
|
|
|
+ cmpr = 54;
|
|
|
+ break;
|
|
|
+ case 3001 ... 3999:
|
|
|
+ cmpr = 52;
|
|
|
+ break;
|
|
|
+ /* buffer range for nvram, erst */
|
|
|
+ case 4000 ... 10000:
|
|
|
+ cmpr = 45;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ cmpr = 60;
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- big_oops_buf_sz = (psinfo->bufsize * 100) / 45;
|
|
|
+ big_oops_buf_sz = (psinfo->bufsize * 100) / cmpr;
|
|
|
big_oops_buf = kmalloc(big_oops_buf_sz, GFP_KERNEL);
|
|
|
if (big_oops_buf) {
|
|
|
size = max(zlib_deflate_workspacesize(WINDOW_BITS, MEM_LEVEL),
|