nr_to_scan needs to be (unsigned) long, not int, otherwise we get negative values on 32bit systems during shrink resulting in lots of messages like one below.
[ 4078.989603] shrink_slab: i915_gem_inactive_scan+0x0/0xc0 negative objects to delete nr=-289580136
Introduced in "drivers: convert shrinkers to new count/scan API" (383e4f4a4cdeb2dd552e90811089bcb4d41eb32e in linux-next.git)
Signed-off-by: Artem Savkov artem.savkov@gmail.com --- drivers/gpu/drm/i915/i915_gem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 4635354..b3b4891b 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -4649,7 +4649,7 @@ i915_gem_inactive_scan(struct shrinker *shrinker, struct shrink_control *sc) struct drm_i915_private, mm.inactive_shrinker); struct drm_device *dev = dev_priv->dev; - int nr_to_scan = sc->nr_to_scan; + unsigned long nr_to_scan = sc->nr_to_scan; unsigned long freed; bool unlock = true;
On Tue, Jul 23, 2013 at 11:18:06PM +0400, Artem Savkov wrote:
nr_to_scan needs to be (unsigned) long, not int, otherwise we get negative values on 32bit systems during shrink resulting in lots of messages like one below.
[ 4078.989603] shrink_slab: i915_gem_inactive_scan+0x0/0xc0 negative objects to delete nr=-289580136
Introduced in "drivers: convert shrinkers to new count/scan API" (383e4f4a4cdeb2dd552e90811089bcb4d41eb32e in linux-next.git)
Sorry, looks like my analysis was wrong, I can still see the issue with this patch.
dri-devel@lists.freedesktop.org