From: Oliver Neukum <oliver@neukum.org>
To: Mike Murphy <mamurph@cs.clemson.edu>,
linux-usb@vger.kernel.org, linux-input@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] input: xpad.c - Xbox 360 wireless and sysfs support
Date: Mon, 16 Feb 2009 09:31:33 +0100 [thread overview]
Message-ID: <200902160931.34771.oliver@neukum.org> (raw)
In-Reply-To: <5aa163d00902142008g138826br80d3ea989e7af691@mail.gmail.com>
Am Sunday 15 February 2009 05:08:46 schrieb Mike Murphy:
> Greetings,
>
> The attached patch is a result of a few days of hacking to get better
> Linux support for Xbox 360 wireless controllers. Major functional
> improvements include support for the LEDs on the wireless controllers
> (which are auto-set to the controller number as they are on the
> official console), added support for rumble effects on wireless
> controllers, added support for dead zones on all supported
> controllers, and added support for a square axis mapping for the left
> stick on all supported controllers. A large amount of the bulk in this
> patch is from the addition of a sysfs interface to retrieve
> information and adjust the dead zone/square axis settings.
[..]
> Patch generated against 2.6.28.2 (no changes in relevant in-kernel
> driver from 2.6.28.2 to 2.6.28.5, so should apply against latest
> stable).
>
> Comments are appreciated. I am _NOT_ subscribed to the LKML, so please
> CC me directly.
1. You need to check the returns of sscanf
2. This is very ugly:
+/* read-only attrs */
+static ssize_t xpad_show_int(struct xpad_data *xd, struct xpad_attribute *attr,
+ char *buf)
+{
+ int value;
+ if (!strcmp(attr->attr.name, "controller_number"))
+ value = xd->controller_number;
+ else if (!strcmp(attr->attr.name, "pad_present"))
+ value = xd->pad_present;
+ else if (!strcmp(attr->attr.name, "controller_type"))
+ value = xd->controller_type;
+ else
+ value = 0;
+ return sprintf(buf, "%d\n", value);
+}
3. Possible memory leak in error case:
+static struct xpad_data *xpad_create_data(const char *name, struct kobject *parent) {
+ struct xpad_data *data = NULL;
+ int check;
+
+ data = kzalloc(sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return NULL;
+
+ check = kobject_init_and_add(&data->kobj, &xpad_ktype, parent, "%s", name);
+ if (check) {
+ kobject_put(&data->kobj);
+ return NULL;
+ }
4. Why the cpup variety?
+ coords[0] = (__s16) le16_to_cpup((__le16 *)(data + x_offset));
5. What happens if this work is already scheduled?
if (data[0] & 0x08) {
+ padnum = xpad->controller_data->controller_number;
if (data[1] & 0x80) {
- xpad->pad_present = 1;
- usb_submit_urb(xpad->bulk_out, GFP_ATOMIC);
- } else
- xpad->pad_present = 0;
+ printk(KERN_INFO "Wireless Xbox 360 pad #%d present\n", padnum);
+ xpad->controller_data->pad_present = 1;
+
+ INIT_WORK(&xpad->work, &xpad_work_controller);
+ schedule_work(&xpad->work);
6. No GFP_ATOMIC. If you can take a mutex you can sleep.
+ usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
Regards
Oliver
next prev parent reply other threads:[~2009-02-16 8:30 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-15 4:08 [PATCH] input: xpad.c - Xbox 360 wireless and sysfs support Mike Murphy
2009-02-16 8:31 ` Oliver Neukum [this message]
2009-02-16 13:22 ` Mike Murphy
2009-02-16 15:21 ` Oliver Neukum
2009-02-19 4:04 ` Mike Murphy
2009-02-16 16:13 ` Greg KH
2009-02-16 18:09 ` Mike Murphy
2009-02-16 18:59 ` Greg KH
2009-02-16 19:30 ` Mike Murphy
2009-02-16 20:22 ` Greg KH
2009-02-17 2:53 ` Mike Murphy
2009-02-17 3:18 ` Greg KH
2009-02-17 4:57 ` Mike Murphy
2009-02-17 18:27 ` Mike Murphy
2009-02-17 18:39 ` Greg KH
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=200902160931.34771.oliver@neukum.org \
--to=oliver@neukum.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mamurph@cs.clemson.edu \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox