Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755941AbXLGOUk (ORCPT ); Fri, 7 Dec 2007 09:20:40 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755196AbXLGOU1 (ORCPT ); Fri, 7 Dec 2007 09:20:27 -0500 Received: from smtp.ustc.edu.cn ([202.38.64.16]:43687 "HELO ustc.edu.cn" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with SMTP id S1755169AbXLGOUZ (ORCPT ); Fri, 7 Dec 2007 09:20:25 -0500 Message-ID: <397037229.08913@ustc.edu.cn> X-EYOUMAIL-SMTPAUTH: wfg@mail.ustc.edu.cn Date: Fri, 7 Dec 2007 16:35:14 +0800 From: Fengguang Wu To: Andrew Morton Cc: Jiri Kosina , linux-kernel@vger.kernel.org Subject: [PATCH BUGFIX] hid: the `bit' in hidinput_mapping_quirks() is an out parameter References: <20071204211701.994dfce6.akpm@linux-foundation.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20071204211701.994dfce6.akpm@linux-foundation.org> X-GPG-Fingerprint: 53D2 DDCE AB5C 8DC6 188B 1CB1 F766 DA34 8D8B 1C6D User-Agent: Mutt/1.5.17 (2007-11-01) Message-Id: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 7169 Lines: 168 Fix a panic, by changing hidinput_mapping_quirks(,, unsigned long *bit,) to hidinput_mapping_quirks(,, unsigned long **bit,) The `bit' in this function is an out parameter. Cc: Jiri Kosina Signed-off-by: Fengguang Wu --- drivers/hid/hid-input-quirks.c | 36 +++++++++++++++---------------- drivers/hid/hid-input.c | 2 - include/linux/hid.h | 2 - 3 files changed, 20 insertions(+), 20 deletions(-) --- linux-2.6.24-rc4-mm1.orig/include/linux/hid.h +++ linux-2.6.24-rc4-mm1/include/linux/hid.h @@ -526,7 +526,7 @@ extern void hidinput_disconnect(struct h int hid_set_field(struct hid_field *, unsigned, __s32); int hid_input_report(struct hid_device *, int type, u8 *, int, int); int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field); -int hidinput_mapping_quirks(struct hid_usage *, struct input_dev *, unsigned long *, int *); +int hidinput_mapping_quirks(struct hid_usage *, struct input_dev *, unsigned long **, int *); void hidinput_event_quirks(struct hid_device *, struct hid_field *, struct hid_usage *, __s32); int hidinput_apple_event(struct hid_device *, struct input_dev *, struct hid_usage *, __s32); void hid_input_field(struct hid_device *hid, struct hid_field *field, __u8 *data, int interrupt); --- linux-2.6.24-rc4-mm1.orig/drivers/hid/hid-input.c +++ linux-2.6.24-rc4-mm1/drivers/hid/hid-input.c @@ -382,7 +382,7 @@ static void hidinput_configure_usage(str } /* handle input mappings for quirky devices */ - ret = hidinput_mapping_quirks(usage, input, bit, &max); + ret = hidinput_mapping_quirks(usage, input, &bit, &max); if (ret) goto mapped; --- linux-2.6.24-rc4-mm1.orig/drivers/hid/hid-input-quirks.c +++ linux-2.6.24-rc4-mm1/drivers/hid/hid-input-quirks.c @@ -16,16 +16,16 @@ #include #include -#define map_abs(c) do { usage->code = c; usage->type = EV_ABS; bit = input->absbit; *max = ABS_MAX; } while (0) -#define map_rel(c) do { usage->code = c; usage->type = EV_REL; bit = input->relbit; *max = REL_MAX; } while (0) -#define map_key(c) do { usage->code = c; usage->type = EV_KEY; bit = input->keybit; *max = KEY_MAX; } while (0) -#define map_led(c) do { usage->code = c; usage->type = EV_LED; bit = input->ledbit; *max = LED_MAX; } while (0) +#define map_abs(c) do { usage->code = c; usage->type = EV_ABS; *bit = input->absbit; *max = ABS_MAX; } while (0) +#define map_rel(c) do { usage->code = c; usage->type = EV_REL; *bit = input->relbit; *max = REL_MAX; } while (0) +#define map_key(c) do { usage->code = c; usage->type = EV_KEY; *bit = input->keybit; *max = KEY_MAX; } while (0) +#define map_led(c) do { usage->code = c; usage->type = EV_LED; *bit = input->ledbit; *max = LED_MAX; } while (0) -#define map_abs_clear(c) do { map_abs(c); clear_bit(c, bit); } while (0) -#define map_key_clear(c) do { map_key(c); clear_bit(c, bit); } while (0) +#define map_abs_clear(c) do { map_abs(c); clear_bit(c, *bit); } while (0) +#define map_key_clear(c) do { map_key(c); clear_bit(c, *bit); } while (0) static int quirk_belkin_wkbd(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER) return 0; @@ -41,7 +41,7 @@ static int quirk_belkin_wkbd(struct hid_ } static int quirk_cherry_cymotion(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER) return 0; @@ -57,7 +57,7 @@ static int quirk_cherry_cymotion(struct } static int quirk_logitech_ultrax_remote(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_LOGIVENDOR) return 0; @@ -90,7 +90,7 @@ static int quirk_logitech_ultrax_remote( } static int quirk_chicony_tactical_pad(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR) return 0; @@ -115,7 +115,7 @@ static int quirk_chicony_tactical_pad(st } static int quirk_microsoft_ergonomy_kb(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR) return 0; @@ -138,7 +138,7 @@ static int quirk_microsoft_ergonomy_kb(s } static int quirk_microsoft_presenter_8k(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_MSVENDOR) return 0; @@ -156,7 +156,7 @@ static int quirk_microsoft_presenter_8k( } static int quirk_petalynx_remote(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if (((usage->hid & HID_USAGE_PAGE) != HID_UP_LOGIVENDOR) && ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER)) @@ -184,7 +184,7 @@ static int quirk_petalynx_remote(struct } static int quirk_logitech_wireless(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER) return 0; @@ -236,7 +236,7 @@ static int quirk_logitech_wireless(struc } static int quirk_cherry_genius_29e(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER) return 0; @@ -254,7 +254,7 @@ static int quirk_cherry_genius_29e(struc } static int quirk_btc_8193(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER) return 0; @@ -307,7 +307,7 @@ static int quirk_btc_8193(struct hid_usa static const struct hid_input_blacklist { __u16 idVendor; __u16 idProduct; - int (*quirk)(struct hid_usage *, struct input_dev *, unsigned long *, int *); + int (*quirk)(struct hid_usage *, struct input_dev *, unsigned long **, int *); } hid_input_blacklist[] = { { VENDOR_ID_BELKIN, DEVICE_ID_BELKIN_WIRELESS_KEYBOARD, quirk_belkin_wkbd }, @@ -335,7 +335,7 @@ static const struct hid_input_blacklist int hidinput_mapping_quirks(struct hid_usage *usage, struct input_dev *input, - unsigned long *bit, int *max) + unsigned long **bit, int *max) { struct hid_device *device = input_get_drvdata(input); int i = 0; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/