On Mon, Apr 23, 2018 at 08:18:48AM -0700, Jason Gerecke wrote: > On Sun, Apr 22, 2018 at 4:06 PM, Peter Hutterer > <peter.hutte...@who-t.net> wrote: > > On Fri, Apr 20, 2018 at 02:33:21PM -0700, Jason Gerecke wrote: > >> The 2.6.36 kernel removes several members from `struct input_dev` (e.g. > >> abs, absres) and replaces them with a structs and accessor functions. > >> To allow the input-wacom code to compile under both old and new kernels, > >> commits ca9786f and the mailinglist version of ab2ea683fb conditionally > >> defined their own implementation of the accessor function for older > >> kernels. > >> > >> It was noticed, however, that this did not compile correctly on RHEL 6 > >> systems. It seems that the accessor API introduced in 2.6.36 is provided > >> in their customized "2.6.32" kernel. This results in a redefinition error > >> that halts compilation. To work around this, commit 58d8320541 removed > >> the condtional and renamed our implementation of the accessor. Commit > >> ab2ea683fb was also similarly modified from its mailinglist version prior > >> to being committed. This change prevented the redefinition on RHEL 6 and > >> also worked fine for pre-2.6.36 kernels. The change ended up breaking > >> compilation under stock 2.6.36 kernels since the members used by the > >> renamed function were removed. > >> > >> To ensure the code compiles in all cases, we need to be a little more > >> clever. We make use of the recently-added "WACOM_LINUX_TRY_COMPILE" > >> configure macro to see if the kernel provides the accessor API or not. > >> If it does, we make use of it; of not, we access the members directly. > >> > >> Fixes: 58d8320541 ("2.6.30: define wacom_input_abs_get_val") > >> Fixes: ab2ea683fb ("2.6.32: Backport resolution support to 2.6.32") > >> Signed-off-by: Jason Gerecke <jason.gere...@wacom.com> > >> --- > >> 2.6.32/wacom_wac.c | 8 ++++++++ > >> configure.ac | 15 +++++++++++++++ > >> 2 files changed, 23 insertions(+) > >> > >> diff --git a/2.6.32/wacom_wac.c b/2.6.32/wacom_wac.c > >> index 3ad7aae..11c7513 100644 > >> --- a/2.6.32/wacom_wac.c > >> +++ b/2.6.32/wacom_wac.c > >> @@ -924,7 +924,11 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) > >> > >> static int wacom_input_abs_get_val(struct input_dev *input, unsigned int > >> axis) > >> { > >> +#ifndef WACOM_ABSACCESSOR_36 > >> return input->abs[axis]; > >> +#else > >> + return input_abs_get_val(input, axis); > >> +#endif > > > > I've been staring at this for a bit and quickly skimmed through the commits > > metioned above but I'm still unsure why you couldn't just leave > > input_abs_get_val() here and make that function's existence (or internal > > implementation) dependent on the WACOM_ABSACCESSOR_36 define. Would save you > > a buch of ifdefs. > > > > It would definitely be possible to do that, but I don't really see an > ifdef savings. I suppose if we shuffled the two functions to be next > to each other we could get away with one ifdef instead of two, but (at > least for the moment) I'm perfectly happy leaving things where they > are and named with the 'wacom_' prefix to make it clear at the point > of use that we're not necessarily dealing with an upstream function.
the two benefits you get: the #ifdef in only one location, where the accessor functions are defined. and a better ability to cherry-pick because you should have less conflicts in those. Cheers, Peter > >> } > >> > >> static void wacom_multitouch_generic_finger(struct wacom_wac *wacom, > >> @@ -2080,7 +2084,11 @@ void wacom_setup_device_quirks(struct wacom *wacom) > >> > >> static inline void wacom_input_abs_set_res(struct input_dev *dev, > >> unsigned int axis, int val) > >> { > >> +#ifndef WACOM_ABSACCESSOR_36 > > > > personal nit: I prefer something like HAVE_INPUT_ABS_SET_RES because it > > makes the whole thing more obvious when reading. WACOM_ABSACCESSOR_36 is a > > bit harder to understand (naming it WACOM_ABSACESSOR_v2_36 might make it > > easier, but still). > > > > I was copying the existing style introduced by Benjamin > ('WACOM_POWERSUPPLY_41'), but now that you mention it, I also prefer > the more boolean-like reading of your suggestion. Maybe we could use a > follow-up patch to fix both of these :D > > >> dev->absres[axis] = val; > >> +#else > >> + input_abs_set_res(dev, axis, val); > >> +#endif > >> } > >> > >> static void wacom_abs_set_axis(struct input_dev *input_dev, > >> diff --git a/configure.ac b/configure.ac > >> index 1cb4394..a14a569 100644 > >> --- a/configure.ac > >> +++ b/configure.ac > >> @@ -194,6 +194,21 @@ struct power_supply_desc test; > >> AC_MSG_RESULT([pre-v4.1]) > >> ]) > >> > >> +dnl RedHat entreprise Linux 6.x backports abs accessor functions from > >> 2.6.36 > > > > typo, also officially it's "Enterprise" (capital E) > > > > Good catch >.< > > >> +AC_MSG_CHECKING(abs accessor version) > >> +WACOM_LINUX_TRY_COMPILE([ > >> +#include <linux/input.h> > >> +],[ > >> +struct input_dev test; > >> +input_abs_get_res(&test, 0); > > > > fwiw, just passing NULL should work here, makes the check just one line. > > > > The input-wacom repo is decidedly yours, so this is all very much your > > decision :) > > > > Cheers, > > Peter > > > > Thanks as always for the good feedback! I'll have to unfortunately put > some of your suggestions/questions on the back burner (srcdir != > builddir, HAVE_INPUT_ABS_SET_RES) due to other time commitments. Maybe > Ping or Aaron can pick them up? > > Jason > --- > Now instead of four in the eights place / > you’ve got three, ‘Cause you added one / > (That is to say, eight) to the two, / > But you can’t take seven from three, / > So you look at the sixty-fours.... > > >> +],[ > >> + HAVE_ABSACCESSOR_36=yes > >> + AC_MSG_RESULT([v2.6.36+]) > >> + AC_DEFINE([WACOM_ABSACCESSOR_36], [], [kernel uses abs accessor > >> macros from v2.6.36+]) > >> +],[ > >> + HAVE_ABSACCESSOR_36=no > >> + AC_MSG_RESULT([pre-v2.6.36]) > >> +]) > >> > >> dnl Check which version of the driver we should compile > >> AC_DEFUN([WCM_EXPLODE], [$(echo "$1" | awk '{split($[0],x,"[[^0-9]]"); > >> printf("%03d%03d%03d\n",x[[1]],x[[2]],x[[3]]);}')]) > >> -- > >> 2.17.0 > >> > >> > >> ------------------------------------------------------------------------------ > >> Check out the vibrant tech community on one of the world's most > >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot > >> _______________________________________________ > >> Linuxwacom-devel mailing list > >> Linuxwacom-devel@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel > >> > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel