All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Cohen <david.a.cohen@linux.intel.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: rjw@rjwysocki.net, len.brown@intel.com,
	sarah.a.sharp@linux.intel.com, gregkh@linuxfoundation.org,
	linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-usb@vger.kernel.org, santosh.shilimkar@ti.com
Subject: Re: [RFC/PATCH 1/3] pm: make PM macros more smart
Date: Sun, 15 Dec 2013 11:25:08 -0800	[thread overview]
Message-ID: <20131215192508.GA10514@psi-dev26.jf.intel.com> (raw)
In-Reply-To: <20131215175112.GA23298@Nokia-N900>

On Sun, Dec 15, 2013 at 06:51:12PM +0100, Pavel Machek wrote:
> On Thu 2013-12-12 21:18:23, David Cohen wrote:
> > This patch makes SET_SYSTEM_SLEEP_PM_OPS() and SET_RUNTIME_PM_OPS() more
> > smart.
> > 
> > Despite those macros check for '#ifdef CONFIG_PM_SLEEP/RUNTIME' to avoid
> > setting the callbacks when such #ifdef's aren't defined, they don't
> > handle compiler to avoid messages like that:
> > 
> > drivers/usb/host/xhci-plat.c:200:12: warning: ???xhci_plat_suspend??? defined but not used [-Wunused-function]
> > drivers/usb/host/xhci-plat.c:208:12: warning: ???xhci_plat_resume??? defined but not used [-Wunused-function]
> > 
> > As result, those macros get rid of #ifdef's when setting callbacks but
> > not when implementing them.
> > 
> > With this patch, drivers using SET_*_PM_OPS() macros don't need to #ifdef
> > the callbacks implementation as well.
> 
> Well... Interesting trickery, but it means that resulting kernel
> will be bigge due to the dead functions no?

Actually, it doesn't get bigger. Before sending the patch I did this
dummy test app:

--------------------------------------------------------------------------------
#include <stdio.h>

#define USE_IT_OR_LOOSE_IT(fn)  ((void *)((unsigned long)(fn) - (unsigned long)(fn)))

#ifdef MAKE_ME_NULL
static int func1(int a)
{
        printf("Hey!!\n");
        return 0;
}
#endif

struct global_data {
        int (*func)(int);
};

static struct global_data gd = {
#ifdef MAKE_ME_NULL
        .func = USE_IT_OR_LOOSE_IT(func1),
#endif
};

int main(void)
{
#ifdef MAKE_ME_NULL
        printf("MAKE_ME_NULL is defined\n");
#else
        printf("MAKE_ME_NULL is NOT defined\n");
#endif
        printf("%p\n", gd.func);
        return 0;
}
--------------------------------------------------------------------------------

Then I compiled 2 .S files:
$ gcc -DMAKE_ME_NULL test1.c -O2 -S -o test_makemenull.S
$ gcc test1.c -O2 -S -o test_no_makemenull.S

This is the diff between both:

--------------------------------------------------------------------------------
--- test_makemenull.S	2013-12-15 11:07:02.635992492 -0800
+++ test_no_makemenull.S	2013-12-15 11:07:10.639992359 -0800
@@ -1,7 +1,7 @@
 	.file	"test1.c"
 	.section	.rodata.str1.1,"aMS",@progbits,1
 .LC0:
-	.string	"MAKE_ME_NULL is defined"
+	.string	"MAKE_ME_NULL is NOT defined"
 .LC1:
 	.string	"%p\n"
 	.section	.text.startup,"ax",@progbits
@@ -9,7 +9,7 @@
 	.globl	main
 	.type	main, @function
 main:
-.LFB12:
+.LFB11:
 	.cfi_startproc
 	subq	$8, %rsp
 	.cfi_def_cfa_offset 16
@@ -24,7 +24,7 @@
 	.cfi_def_cfa_offset 8
 	ret
 	.cfi_endproc
-.LFE12:
+.LFE11:
 	.size	main, .-main
 	.ident	"GCC: (Debian 4.8.2-1) 4.8.2"
 	.section	.note.GNU-stack,"",@progbits
--------------------------------------------------------------------------------

My conclusion is gcc's -O2 handles this situation pretty well, which
makes my patch to have not much actual side effects on kernel binary.

Br, David Cohen

> 
> That may be acceptable tradeoff, but I guess its worth discussing...
> -- 
> (english) http://www.livejournal.com/~pavelmachek
> (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

  reply	other threads:[~2013-12-15 19:25 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-13  5:18 [RFC/PATCH 0/3] pm: Make SET_*_PM_OPS() macros more smart David Cohen
2013-12-13  5:18 ` [RFC/PATCH 1/3] pm: make PM " David Cohen
2013-12-15 17:51   ` Pavel Machek
2013-12-15 19:25     ` David Cohen [this message]
2013-12-20 19:55       ` Pavel Machek
2013-12-20 20:23         ` David Cohen
2014-01-14 22:42           ` David Cohen
2014-01-22 21:21             ` David Cohen
2013-12-13  5:18 ` [RFC/PATCH 2/3] usb/xhci: implement proper static inline stubs when !CONFIG_PM David Cohen
2013-12-13  5:18 ` [RFC/PATCH 3/3] usb/xhci-plat: remove unnecessary #ifdef checks for CONFIG_PM_SLEEP David Cohen
2013-12-13  8:19   ` Ulf Hansson
2013-12-13 15:46     ` David Cohen
     [not found] ` <1386911905-2366-1-git-send-email-david.a.cohen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2013-12-19  5:12   ` [RFC/PATCH 0/3] pm: Make SET_*_PM_OPS() macros more smart David Cohen
2013-12-19  5:12     ` David Cohen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131215192508.GA10514@psi-dev26.jf.intel.com \
    --to=david.a.cohen@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=rjw@rjwysocki.net \
    --cc=santosh.shilimkar@ti.com \
    --cc=sarah.a.sharp@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.