3.0.22-stable review
Subsystems (18)
Greg KH
maintainercover 3.0.22-stable review
This is the start of the stable review cycle for the 3.0.22 release. There are 15 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun Feb 19 00:55:09 UTC 2012. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v3.0/stable-review/patch-3.0.22-rc1.gz
and the diffstat can be found below.
thanks,
greg k-h
-------------
Makefile | 4 +- arch/x86/pci/xen.c | 2 +- crypto/sha512_generic.c | 70 ++++++++++++++---------------- drivers/gpio/pca953x.c | 6 +- drivers/gpu/drm/i915/intel_lvds.c | 8 +++ drivers/hwmon/f75375s.c | 4 +- include/linux/proportions.h | 4 ++ include/trace/events/writeback.h | 5 ++- kernel/relay.c | 10 +++- mm/slub.c | 6 +++ net/mac80211/rx.c | 2 +- sound/pci/intel8x0.c | 6 +++ tools/perf/bench/mem-memcpy-x86-64-asm.S | 6 +++ tools/perf/util/evsel.c | 1 + 14 files changed, 85 insertions(+), 49 deletions(-)
Greg KH
maintainerPATCH 1/15 perf evsel: Fix an issue where perf report fails to show the proper percentage
3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Naveen N. Rao" <[email protected]>
commit a4a03fc7ef89020baca4f19174e6a43767c6d78a upstream.
This patch fixes an issue where perf report shows nan% for certain perf.data files. The below is from a report for a do_fork probe:
-nan% sshd [kernel.kallsyms] [k] do_fork -nan% packagekitd [kernel.kallsyms] [k] do_fork -nan% dbus-daemon [kernel.kallsyms] [k] do_fork -nan% bash [kernel.kallsyms] [k] do_fork
A git bisect shows commit f3bda2c as the cause. However, looking back through the git history, I saw commit 640c03c which seems to have removed the required initialization for perf_sample->period. The problem only started showing after commit f3bda2c. The below patch re-introduces the initialization and it fixes the problem for me.
With the below patch, for the same perf.data:
73.08% bash [kernel.kallsyms] [k] do_fork 8.97% 11-dhclient [kernel.kallsyms] [k] do_fork 6.41% sshd [kernel.kallsyms] [k] do_fork 3.85% 20-chrony [kernel.kallsyms] [k] do_fork 2.56% sendmail [kernel.kallsyms] [k] do_fork
This patch applies over current linux-tip commit 9949284.
Problem introduced in:
$ git describe 640c03c v2.6.37-rc3-83-g640c03c
--- tools/perf/util/evsel.c | 1 + 1 file changed, 1 insertion(+)
tools/perf/util/evsel.c +1 -0
@@ -348,6 +348,7 @@ int perf_event__parse_sample(const union data->cpu = data->pid = data->tid =-1 ; data->stream_id = data->id = data->time =-1ULL ; + data->period =1 ;if (event->header.type !=PERF_RECORD_SAMPLE ) {if (!sample_id_all)
Greg KH
maintainerPATCH 2/15 perf tools: Fix perf stack to non executable on x86_64
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Olsa <[email protected]>
commit 7a0153ee15575a4d07b5da8c96b79e0b0fd41a12 upstream.
By adding following objects:
bench/mem-memcpy-x86-64-asm.o
the x86_64 perf binary ended up with executable stack.
The reason was that above object are assembler sourced and is missing the GNU-stack note section. In such case the linker assumes that the final binary should not be restricted at all and mark the stack as RWX.
Adding section ".note.GNU-stack" definition to mentioned object, with all flags disabled, thus omiting this object from linker stack flags decision.
Problem introduced in:
$ git describe ea7872b v2.6.37-rc2-19-gea7872b
Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=783570
--- tools/perf/bench/mem-memcpy-x86-64-asm.S | 6 ++++++ 1 file changed, 6 insertions(+)
tools/perf/bench/mem-memcpy-x86-64-asm.S +6 -0
@@ -1,2 +1,8 @@ #include "../../../arch/x86/lib/memcpy_64.S" +/* + * We need to provide note.GNU-stack section, saying that we want + * NOT executable stack. Otherwise the final linking will assume that + * the ELF stack should not be restricted at all and set it RWX. + */ +.section .note.GNU-stack,"",@progbits
Greg KH
maintainerPATCH 3/15 drm/i915: no lvds quirk for AOpen MP45
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Vetter <[email protected]>
commit e57b6886f555ab57f40a01713304e2053efe51ec upstream.
According to a bug report, it doesn't have one.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44263
--- drivers/gpu/drm/i915/intel_lvds.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/gpu/drm/i915/intel_lvds.c +8 -0
@@ -714,6 +714,14 @@ static const struct dmi_system_id intel_ }, { .callback = intel_no_lvds_dmi_callback, + .ident = "AOpen i45GMx-I", + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"AOpen" ), + DMI_MATCH(DMI_BOARD_NAME, "i45GMx-I"), + }, + }, + { + .callback = intel_no_lvds_dmi_callback, .ident = "Aopen i945GTt-VFA", .matches = { DMI_MATCH(DMI_PRODUCT_VERSION, "AO00001JW"),
Greg KH
maintainerPATCH 4/15 hwmon: (f75375s) Fix bit shifting in f75375_write16
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nikolaus Schulz <[email protected]>
commit eb2f255b2d360df3f500042a2258dcf2fcbe89a2 upstream.
In order to extract the high byte of the 16-bit word, shift the word to the right, not to the left.
--- drivers/hwmon/f75375s.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hwmon/f75375s.c +1 -1
@@ -159,7 +159,7 @@ static inline void f75375_write8(structstatic inline void f75375_write16 (struct i2c_client *client,u8 reg,u16 value) { -int err =i2c_smbus_write_byte_data (client, reg, (value <<8 )); +int err =i2c_smbus_write_byte_data (client, reg, (value >>8 ));if (err)return ;i2c_smbus_write_byte_data (client, reg +1 , (value &0xFF ));
Greg KH
maintainerPATCH 5/15 lib: proportion: lower PROP_MAX_SHIFT to 32 on 64-bit kernel
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wu Fengguang <[email protected]>
commit 3310225dfc71a35a2cc9340c15c0e08b14b3c754 upstream.
PROP_MAX_SHIFT should be set to <=32 on 64-bit box. This fixes two bugs in the below lines of bdi_dirty_limit():
bdi_dirty *= numerator; do_div(bdi_dirty, denominator);
1) divide error: do_div() only uses the lower 32 bit of the denominator, which may trimmed to be 0 when PROP_MAX_SHIFT > 32.
2) overflow: (bdi_dirty * numerator) could easily overflow if numerator used up to 48 bits, leaving only 16 bits to bdi_dirty
--- include/linux/proportions.h | 4 ++++ 1 file changed, 4 insertions(+)
include/linux/proportions.h +4 -0
@@ -81,7 +81,11 @@ void prop_inc_percpu(struct prop_descrip* Limit the time part in order to ensure there are some bits left for the * cycle counter and fraction multiply. */ +#if BITS_PER_LONG ==32 #define PROP_MAX_SHIFT (3*BITS_PER_LONG/4) +#else +#define PROP_MAX_SHIFT (BITS_PER_LONG/2) +#endif #define PROP_FRAC_SHIFT (BITS_PER_LONG - PROP_MAX_SHIFT - 1)#define PROP_FRAC_BASE (1UL << PROP_FRAC_SHIFT)
Greg KH
maintainerPATCH 6/15 relay: prevent integer overflow in relay_open()
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
commit f6302f1bcd75a042df69866d98b8d775a668f8f1 upstream.
"subbuf_size" and "n_subbufs" come from the user and they need to be capped to prevent an integer overflow.
--- kernel/relay.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
kernel/relay.c +8 -2
@@ -164,10 +164,14 @@ depopulate:*/ static struct rchan_buf *relay_create_buf (struct rchan *chan) { -struct rchan_buf *buf =kzalloc (sizeof (struct rchan_buf ),GFP_KERNEL ); -if (!buf) +struct rchan_buf *buf; + +if (chan->n_subbufs >UINT_MAX /sizeof (size_t *))return NULL ; + buf =kzalloc (sizeof (struct rchan_buf ),GFP_KERNEL ); +if (!buf) +return NULL ; buf->padding =kmalloc (chan->n_subbufs *sizeof (size_t *),GFP_KERNEL );if (!buf->padding) goto free_buf;
@@ -574,6 +578,8 @@ struct rchan *relay_open(const char *basif (!(subbuf_size && n_subbufs))return NULL ; +if (subbuf_size >UINT_MAX / n_subbufs) +return NULL ; chan =kzalloc (sizeof (struct rchan ),GFP_KERNEL );if (!chan)
Greg KH
maintainerPATCH 7/15 mac80211: timeout a single frame in the rx reorder buffer
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eliad Peller <[email protected]>
commit 07ae2dfcf4f7143ce191c6436da1c33f179af0d6 upstream.
The current code checks for stored_mpdu_num > 1, causing the reorder_timer to be triggered indefinitely, but the frame is never timed-out (until the next packet is received)
--- net/mac80211/rx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/mac80211/rx.c +1 -1
@@ -610,7 +610,7 @@ static void ieee80211_sta_reorder_releas index =seq_sub (tid_agg_rx->head_seq_num, tid_agg_rx->ssn) % tid_agg_rx->buf_size;if (!tid_agg_rx->reorder_buf[index] && - tid_agg_rx->stored_mpdu_num >1 ) { + tid_agg_rx->stored_mpdu_num) {/* * No buffers ready to be released, but check whether any * frames in the reorder buffer have timed out.
Greg KH
maintainerPATCH 8/15 writeback: fix dereferencing NULL bdi->dev on trace_writeback_queue
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wu Fengguang <[email protected]>
commit 977b7e3a52a7421ad33a393a38ece59f3d41c2fa upstream.
When a SD card is hot removed without umount, del_gendisk() will call bdi_unregister() without destroying/freeing it. This leaves the bdi in the bdi->dev = NULL, bdi->wb.task = NULL, bdi->bdi_list removed state.
When sync(2) gets the bdi before bdi_unregister() and calls bdi_queue_work() after the unregister, trace_writeback_queue will be dereferencing the NULL bdi->dev. Fix it with a simple test for NULL.
LKML-reference: http://lkml.org/lkml/2012/1/18/346
--- include/trace/events/writeback.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
include/trace/events/writeback.h +4 -1
@@ -23,7 +23,10 @@ DECLARE_EVENT_CLASS(writeback_work_class__field (int, for_background) ),TP_fast_assign ( - strncpy(__entry->name, dev_name(bdi->dev), 32); + struct device *dev = bdi->dev; +if (!dev) + dev = default_backing_dev_info.dev; +strncpy (__entry->name,dev_name (dev),32 ); __entry->nr_pages = work->nr_pages; __entry->sb_dev = work->sb ? work->sb->s_dev :0 ; __entry->sync_mode = work->sync_mode;
Greg KH
maintainerPATCH 9/15 gpio/pca953x: Fix warning of enabled interrupts in handler
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Jander <[email protected]>
commit 6dd599f8af0166805951f4421a78ba716d78321a upstream.
When using nested threaded irqs, use handle_nested_irq(). This function does not call the chip handler, so no handler is set.
--- drivers/gpio/pca953x.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/gpio/pca953x.c +3 -3
@@ -437,7 +437,7 @@ static irqreturn_t pca953x_irq_handler(ido { level =__ffs (pending); -generic_handle_irq (level + chip->irq_base); +handle_nested_irq (level + chip->irq_base); pending &= ~(1 << level); }while (pending);
@@ -481,8 +481,8 @@ static int pca953x_irq_setup(struct pca9int irq = lvl + chip->irq_base;irq_set_chip_data (irq, chip); -irq_set_chip_and_handler (irq, &pca953x_irq_chip, - handle_simple_irq); +irq_set_chip (irq, &pca953x_irq_chip); +irq_set_nested_thread (irq, true);#ifdef CONFIG_ARM set_irq_flags (irq,IRQF_VALID );#else
Greg KH
maintainerPATCH 10/15 hwmon: (f75375s) Fix automatic pwm mode setting for F75373 & F75375
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nikolaus Schulz <[email protected]>
commit 09e87e5c4f9af656af2a8a3afc03487c5d9287c3 upstream.
In order to enable temperature mode aka automatic mode for the F75373 and F75375 chips, the two FANx_MODE bits in the fan configuration register need be set to 01, not 10.
--- drivers/hwmon/f75375s.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hwmon/f75375s.c +1 -1
@@ -311,7 +311,7 @@ static int set_pwm_enable_direct(struct fanmode |= (3 <<FAN_CTRL_MODE (nr));break ;case 2 :/* AUTOMATIC*/ - fanmode |= (2 <<FAN_CTRL_MODE (nr)); + fanmode |= (1 <<FAN_CTRL_MODE (nr));break ;case 3 :/* fan speed */ break ;
Greg KH
maintainerPATCH 11/15 crypto: sha512 - Use binary and instead of modulus
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Herbert Xu <[email protected]>
commit 58d7d18b5268febb8b1391c6dffc8e2aaa751fcd upstream.
The previous patch used the modulus operator over a power of 2 unnecessarily which may produce suboptimal binary code. This patch changes changes them to binary ands instead.
--- crypto/sha512_generic.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
crypto/sha512_generic.c +2 -2
@@ -78,7 +78,7 @@ static inline void LOAD_OP(int I, u64 *Wstatic inline void BLEND_OP (int I ,u64 *W ) { -W [I %16 ] +=s1 (W [(I -2 ) %16 ]) +W [(I -7 ) %16 ] +s0 (W [(I -15 ) %16 ]); +W [I &15 ] +=s1 (W [(I -2 ) &15 ]) +W [(I -7 ) &15 ] +s0 (W [(I -15 ) &15 ]); } static void
@@ -105,7 +105,7 @@ sha512_transform(u64 *state, const u8 *i#define SHA512_16_79 (i, a, b, c, d, e, f, g, h) \ BLEND_OP(i, W); \ - t1 = h + e1(e) + Ch(e, f, g) + sha512_K[i] + W[(i)%16]; \ + t1 = h + e1(e) + Ch(e, f, g) + sha512_K[i] + W[(i)&15]; \ t2 = e0(a) + Maj(a, b, c); \ d += t1; \ h = t1 + t2
Greg KH
maintainerPATCH 12/15 crypto: sha512 - Avoid stack bloat on i386
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Herbert Xu <[email protected]>
commit 3a92d687c8015860a19213e3c102cad6b722f83c upstream.
Unfortunately in reducing W from 80 to 16 we ended up unrolling the loop twice. As gcc has issues dealing with 64-bit ops on i386 this means that we end up using even more stack space (>1K).
This patch solves the W reduction by moving LOAD_OP/BLEND_OP into the loop itself, thus avoiding the need to duplicate it.
While the stack space still isn't great (>0.5K) it is at least in the same ball park as the amount of stack used for our C sha1 implementation.
Note that this patch basically reverts to the original code so the diff looks bigger than it really is.
--- crypto/sha512_generic.c | 68 ++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 36 deletions(-)
crypto/sha512_generic.c +32 -36
@@ -89,46 +89,42 @@ sha512_transform(u64 *state, const u8 *iint i;u64 W [16 ]; -/* load the input */ -for (i =0 ; i <16 ; i++) -LOAD_OP (i,W , input); -/* load the state into our registers */ a=state[0 ]; b=state[1 ]; c=state[2 ]; d=state[3 ]; e=state[4 ]; f=state[5 ]; g=state[6 ]; h=state[7 ]; -#define SHA512_0_15 (i, a, b, c, d, e, f, g, h) \ - t1 = h + e1(e) + Ch(e, f, g) + sha512_K[i] + W[i]; \ - t2 = e0(a) + Maj(a, b, c); \ - d += t1; \ - h = t1 + t2 - -#define SHA512_16_79 (i, a, b, c, d, e, f, g, h) \ - BLEND_OP(i, W); \ - t1 = h + e1(e) + Ch(e, f, g) + sha512_K[i] + W[(i)&15]; \ - t2 = e0(a) + Maj(a, b, c); \ - d += t1; \ - h = t1 + t2 - -for (i =0 ; i <16 ; i +=8 ) { -SHA512_0_15 (i, a, b, c, d, e, f, g, h); -SHA512_0_15 (i +1 , h, a, b, c, d, e, f, g); -SHA512_0_15 (i +2 , g, h, a, b, c, d, e, f); -SHA512_0_15 (i +3 , f, g, h, a, b, c, d, e); -SHA512_0_15 (i +4 , e, f, g, h, a, b, c, d); -SHA512_0_15 (i +5 , d, e, f, g, h, a, b, c); -SHA512_0_15 (i +6 , c, d, e, f, g, h, a, b); -SHA512_0_15 (i +7 , b, c, d, e, f, g, h, a); - } -for (i =16 ; i <80 ; i +=8 ) { -SHA512_16_79 (i, a, b, c, d, e, f, g, h); -SHA512_16_79 (i +1 , h, a, b, c, d, e, f, g); -SHA512_16_79 (i +2 , g, h, a, b, c, d, e, f); -SHA512_16_79 (i +3 , f, g, h, a, b, c, d, e); -SHA512_16_79 (i +4 , e, f, g, h, a, b, c, d); -SHA512_16_79 (i +5 , d, e, f, g, h, a, b, c); -SHA512_16_79 (i +6 , c, d, e, f, g, h, a, b); -SHA512_16_79 (i +7 , b, c, d, e, f, g, h, a); +/* now iterate */ +for (i=0 ; i<80 ; i+=8 ) { +if (!(i &8 )) { +int j; + +if (i <16 ) { +/* load the input */ +for (j =0 ; j <16 ; j++) +LOAD_OP (i + j,W , input); + }else { +for (j =0 ; j <16 ; j++) { +BLEND_OP (i + j,W ); + } + } + } + + t1 = h +e1 (e) +Ch (e,f,g) + sha512_K[i ] +W [(i &15 )]; + t2 =e0 (a) +Maj (a,b,c); d+=t1; h=t1+t2; + t1 = g +e1 (d) +Ch (d,e,f) + sha512_K[i+1 ] +W [(i &15 ) +1 ]; + t2 =e0 (h) +Maj (h,a,b); c+=t1; g=t1+t2; + t1 = f +e1 (c) +Ch (c,d,e) + sha512_K[i+2 ] +W [(i &15 ) +2 ]; + t2 =e0 (g) +Maj (g,h,a); b+=t1; f=t1+t2; + t1 = e +e1 (b) +Ch (b,c,d) + sha512_K[i+3 ] +W [(i &15 ) +3 ]; + t2 =e0 (f) +Maj (f,g,h); a+=t1; e=t1+t2; + t1 = d +e1 (a) +Ch (a,b,c) + sha512_K[i+4 ] +W [(i &15 ) +4 ]; + t2 =e0 (e) +Maj (e,f,g); h+=t1; d=t1+t2; + t1 = c +e1 (h) +Ch (h,a,b) + sha512_K[i+5 ] +W [(i &15 ) +5 ]; + t2 =e0 (d) +Maj (d,e,f); g+=t1; c=t1+t2; + t1 = b +e1 (g) +Ch (g,h,a) + sha512_K[i+6 ] +W [(i &15 ) +6 ]; + t2 =e0 (c) +Maj (c,d,e); f+=t1; b=t1+t2; + t1 = a +e1 (f) +Ch (f,g,h) + sha512_K[i+7 ] +W [(i &15 ) +7 ]; + t2 =e0 (b) +Maj (b,c,d); e+=t1; a=t1+t2; } state[0 ] += a; state[1 ] += b; state[2 ] += c; state[3 ] += d;
Greg KH
maintainerPATCH 13/15 ALSA: intel8x0: Fix default inaudible sound on Gateway M520
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel T Chen <[email protected]>
commit 27c3afe6e1cf129faac90405121203962da08ff4 upstream.
The reporter states that audio is inaudible by default without muting 'External Amplifier'. Add a quirk to handle his SSID so that changing the control is not necessary.
--- sound/pci/intel8x0.c | 6 ++++++ 1 file changed, 6 insertions(+)
sound/pci/intel8x0.c +6 -0
@@ -2076,6 +2076,12 @@ static struct ac97_quirk ac97_quirks[] _ }, { .subvendor = 0x161f, + .subdevice = 0x202f, + .name = "Gateway M520", + .type =AC97_TUNE_INV_EAPD + }, + { + .subvendor = 0x161f, .subdevice = 0x203a, .name ="Gateway 4525GZ" ,/* AD1981B */ .type = AC97_TUNE_INV_EAPD
Greg KH
maintainerPATCH 14/15 xen pvhvm: do not remap pirqs onto evtchns if !xen_have_vector_callback
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefano Stabellini <[email protected]>
commit 207d543f472c1ac9552df79838dc807cbcaa9740 upstream.
--- arch/x86/pci/xen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/pci/xen.c +1 -1
@@ -308,7 +308,7 @@ int __init pci_xen_init(void)int __init pci_xen_hvm_init (void ) { -if (!xen_feature (XENFEAT_hvm_pirqs)) +if (!xen_have_vector_callback || !xen_feature (XENFEAT_hvm_pirqs))return 0 ;#ifdef CONFIG_ACPI
Greg KH
maintainerPATCH 15/15 slub: fix a possible memleak in __slab_alloc()
In reply to Greg KH3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
commit 73736e0387ba0e6d2b703407b4d26168d31516a7 upstream.
Zhihua Che reported a possible memleak in slub allocator on CONFIG_PREEMPT=y builds.
It is possible current thread migrates right before disabling irqs in __slab_alloc(). We must check again c->freelist, and perform a normal allocation instead of scratching c->freelist.
Many thanks to Zhihua Che for spotting this bug, introduced in 2.6.39
V2: Its also possible an IRQ freed one (or several) object(s) and populated c->freelist, so its not a CONFIG_PREEMPT only problem.
--- mm/slub.c | 6 ++++++ 1 file changed, 6 insertions(+)
mm/slub.c +6 -0
@@ -1818,6 +1818,11 @@ static void *__slab_alloc(struct kmem_caif (unlikely (!node_match (c, node))) goto another_slab; +/* must check again c->freelist in case of cpu migration or IRQ */ + object = c->freelist; +if (object) + goto update_freelist; +stat (s,ALLOC_REFILL ); load_freelist:
@@ -1827,6 +1832,7 @@ load_freelist:if (kmem_cache_debug (s)) goto debug; +update_freelist: c->freelist =get_freepointer (s, object); page->inuse = page->objects; page->freelist =NULL ;