[PATCH 3/4] usb: allocated usb releated dma buffer with kmalloc_node

For amd64 based two way system. USB always on node0. but dma buffer for urb
allocated via kmalloc always get ram on node1. So change to kmalloc_node to
get dma_buffer on corresponding node

Signed-off-by: Yinghai Lu <[EMAIL PROTECTED]>

diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
index dd34823..0454f29 100644
--- a/drivers/usb/core/config.c
+++ b/drivers/usb/core/config.c
@@ -504,7 +504,7 @@ int usb_get_configuration(struct usb_device *dev)
        if (!dev->rawdescriptors)
                goto err2;
 
-       buffer = kmalloc(USB_DT_CONFIG_SIZE, GFP_KERNEL);
+       buffer = kmalloc_node(USB_DT_CONFIG_SIZE, GFP_KERNEL, 
dev_to_node(&dev->dev));
        if (!buffer)
                goto err2;
        desc = (struct usb_config_descriptor *)buffer;
@@ -531,7 +531,7 @@ int usb_get_configuration(struct usb_device *dev)
                    USB_DT_CONFIG_SIZE);
 
                /* Now that we know the length, get the whole thing */
-               bigbuffer = kmalloc(length, GFP_KERNEL);
+               bigbuffer = kmalloc_node(length, GFP_KERNEL, 
dev_to_node(&dev->dev));
                if (!bigbuffer) {
                        result = -ENOMEM;
                        goto err;
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 927a181..60cefbb 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -718,7 +718,7 @@ static int proc_bulk(struct dev_state *ps, void __user *arg)
        len1 = bulk.len;
        if (len1 > MAX_USBFS_BUFFER_SIZE)
                return -EINVAL;
-       if (!(tbuf = kmalloc(len1, GFP_KERNEL)))
+       if (!(tbuf = kmalloc_node(len1, GFP_KERNEL, dev_to_node(&dev->dev))))
                return -ENOMEM;
        tmo = bulk.timeout;
        if (bulk.ep & 0x80) {
@@ -938,7 +938,7 @@ static int proc_do_submiturb(struct dev_state *ps, struct 
usbdevfs_urb *uurb,
                /* min 8 byte setup packet, max 8 byte setup plus an arbitrary 
data stage */
                if (uurb->buffer_length < 8 || uurb->buffer_length > (8 + 
MAX_USBFS_BUFFER_SIZE))
                        return -EINVAL;
-               if (!(dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL)))
+               if (!(dr = kmalloc_node(sizeof(struct usb_ctrlrequest), 
GFP_KERNEL, dev_to_node(&ps->dev->dev))))
                        return -ENOMEM;
                if (copy_from_user(dr, uurb->buffer, 8)) {
                        kfree(dr);
@@ -990,7 +990,7 @@ static int proc_do_submiturb(struct dev_state *ps, struct 
usbdevfs_urb *uurb,
                                != USB_ENDPOINT_XFER_ISOC)
                        return -EINVAL;
                isofrmlen = sizeof(struct usbdevfs_iso_packet_desc) * 
uurb->number_of_packets;
-               if (!(isopkt = kmalloc(isofrmlen, GFP_KERNEL)))
+               if (!(isopkt = kmalloc_node(isofrmlen, GFP_KERNEL, 
dev_to_node(&ps->dev->dev))))
                        return -ENOMEM;
                if (copy_from_user(isopkt, iso_frame_desc, isofrmlen)) {
                        kfree(isopkt);
@@ -1032,7 +1032,7 @@ static int proc_do_submiturb(struct dev_state *ps, struct 
usbdevfs_urb *uurb,
                kfree(dr);
                return -ENOMEM;
        }
-       if (!(as->urb->transfer_buffer = kmalloc(uurb->buffer_length, 
GFP_KERNEL))) {
+       if (!(as->urb->transfer_buffer = kmalloc_node(uurb->buffer_length, 
GFP_KERNEL, dev_to_node(&ps->dev->dev)))) {
                kfree(isopkt);
                kfree(dr);
                free_async(as);
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 24f10a1..3e63161 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -449,7 +449,7 @@ void usb_hub_tt_clear_buffer (struct usb_device *udev, int 
pipe)
         * since each TT has "at least two" buffers that can need it (and
         * there can be many TTs per hub).  even if they're uncommon.
         */
-       if ((clear = kmalloc (sizeof *clear, GFP_ATOMIC)) == NULL) {
+       if ((clear = kmalloc_node(sizeof *clear, GFP_ATOMIC, 
dev_to_node(&udev->dev))) == NULL) {
                dev_err (&udev->dev, "can't save CLEAR_TT_BUFFER state\n");
                /* FIXME recover somehow ... RESET_TT? */
                return;
@@ -611,7 +611,7 @@ static int hub_configure(struct usb_hub *hub,
                goto fail;
        }
 
-       hub->status = kmalloc(sizeof(*hub->status), GFP_KERNEL);
+       hub->status = kmalloc_node(sizeof(*hub->status), GFP_KERNEL, 
dev_to_node(&hdev->dev));
        if (!hub->status) {
                message = "can't kmalloc hub status buffer";
                ret = -ENOMEM;
@@ -619,7 +619,7 @@ static int hub_configure(struct usb_hub *hub,
        }
        mutex_init(&hub->status_mutex);
 
-       hub->descriptor = kmalloc(sizeof(*hub->descriptor), GFP_KERNEL);
+       hub->descriptor = kmalloc_node(sizeof(*hub->descriptor), GFP_KERNEL, 
dev_to_node(&hdev->dev));
        if (!hub->descriptor) {
                message = "can't kmalloc hub descriptor";
                ret = -ENOMEM;
@@ -2213,7 +2213,7 @@ hub_port_init (struct usb_hub *hub, struct usb_device 
*udev, int port1,
                        int r = 0;
 
 #define GET_DESCRIPTOR_BUFSIZE 64
-                       buf = kmalloc(GET_DESCRIPTOR_BUFSIZE, GFP_NOIO);
+                       buf = kmalloc_node(GET_DESCRIPTOR_BUFSIZE, GFP_NOIO, 
dev_to_node(&udev->dev));
                        if (!buf) {
                                retval = -ENOMEM;
                                continue;
@@ -2343,7 +2343,7 @@ check_highspeed (struct usb_hub *hub, struct usb_device 
*udev, int port1)
        struct usb_qualifier_descriptor *qual;
        int                             status;
 
-       qual = kmalloc (sizeof *qual, GFP_KERNEL);
+       qual = kmalloc_node(sizeof *qual, GFP_KERNEL, dev_to_node(&udev->dev));
        if (qual == NULL)
                return;
 
@@ -2894,7 +2894,7 @@ static int config_descriptors_changed(struct usb_device 
*udev)
                if (len < le16_to_cpu(udev->config[index].desc.wTotalLength))
                        len = 
le16_to_cpu(udev->config[index].desc.wTotalLength);
        }
-       buf = kmalloc (len, GFP_KERNEL);
+       buf = kmalloc_node(len, GFP_KERNEL, dev_to_node(&udev->dev));
        if (buf == NULL) {
                dev_err(&udev->dev, "no mem to re-read configs after reset\n");
                /* assume the worst */
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index f9fed34..1f299e0 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -120,7 +120,7 @@ static int usb_internal_control_msg(struct usb_device 
*usb_dev,
 int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, 
__u8 requesttype,
                         __u16 value, __u16 index, void *data, __u16 size, int 
timeout)
 {
-       struct usb_ctrlrequest *dr = kmalloc(sizeof(struct usb_ctrlrequest), 
GFP_NOIO);
+       struct usb_ctrlrequest *dr = kmalloc_node(sizeof(struct 
usb_ctrlrequest), GFP_NOIO, dev_to_node(&dev->dev));
        int ret;
        
        if (!dr)
@@ -765,7 +765,7 @@ int usb_string(struct usb_device *dev, int index, char 
*buf, size_t size)
        if (size <= 0 || !buf || !index)
                return -EINVAL;
        buf[0] = 0;
-       tbuf = kmalloc(256, GFP_KERNEL);
+       tbuf = kmalloc_node(256, GFP_KERNEL, dev_to_node(&dev->dev));
        if (!tbuf)
                return -ENOMEM;
 
@@ -828,9 +828,9 @@ char *usb_cache_string(struct usb_device *udev, int index)
        char *smallbuf = NULL;
        int len;
 
-       if (index > 0 && (buf = kmalloc(256, GFP_KERNEL)) != NULL) {
+       if (index > 0 && (buf = kmalloc_node(256, GFP_KERNEL, 
dev_to_node(&udev->dev))) != NULL) {
                if ((len = usb_string(udev, index, buf, 256)) > 0) {
-                       if ((smallbuf = kmalloc(++len, GFP_KERNEL)) == NULL)
+                       if ((smallbuf = kmalloc_node(++len, GFP_KERNEL, 
dev_to_node(&udev->dev))) == NULL)
                                return buf;
                        memcpy(smallbuf, buf, len);
                }
@@ -864,7 +864,7 @@ int usb_get_device_descriptor(struct usb_device *dev, 
unsigned int size)
 
        if (size > sizeof(*desc))
                return -EINVAL;
-       desc = kmalloc(sizeof(*desc), GFP_NOIO);
+       desc = kmalloc_node(sizeof(*desc), GFP_NOIO, dev_to_node(&dev->dev));
        if (!desc)
                return -ENOMEM;
 
@@ -900,7 +900,7 @@ int usb_get_device_descriptor(struct usb_device *dev, 
unsigned int size)
 int usb_get_status(struct usb_device *dev, int type, int target, void *data)
 {
        int ret;
-       u16 *status = kmalloc(sizeof(*status), GFP_KERNEL);
+       u16 *status = kmalloc_node(sizeof(*status), GFP_KERNEL, 
dev_to_node(&dev->dev));
 
        if (!status)
                return -ENOMEM;
@@ -1630,7 +1630,7 @@ int usb_driver_set_configuration(struct usb_device *udev, 
int config)
 {
        struct set_config_request *req;
 
-       req = kmalloc(sizeof(*req), GFP_KERNEL);
+       req = kmalloc_node(sizeof(*req), GFP_KERNEL, dev_to_node(&udev->dev));
        if (!req)
                return -ENOMEM;
        req->udev = udev;
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index 8e898e3..007aaf9 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -470,7 +470,7 @@ static int associate_dev(struct us_data *us, struct 
usb_interface *intf)
                return -ENOMEM;
        }
 
-       us->sensebuf = kmalloc(US_SENSE_SIZE, GFP_KERNEL);
+       us->sensebuf = kmalloc_node(US_SENSE_SIZE, GFP_KERNEL, 
dev_to_node(&us->pusb_dev->dev));
        if (!us->sensebuf) {
                US_DEBUGP("Sense buffer allocation failed\n");
                return -ENOMEM;
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index d91b9da..3d25ae1 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -759,7 +759,7 @@ static struct hid_device *usb_hid_configure(struct 
usb_interface *intf)
                return NULL;
        }
 
-       if (!(rdesc = kmalloc(rsize, GFP_KERNEL))) {
+       if (!(rdesc = kmalloc_node(rsize, GFP_KERNEL, dev_to_node(&dev->dev)))) 
{
                dbg("couldn't allocate rdesc memory");
                return NULL;
        }
diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c
index 488d61b..74e67bb 100644
--- a/drivers/hid/usbhid/hiddev.c
+++ b/drivers/hid/usbhid/hiddev.c
@@ -476,7 +476,7 @@ static int hiddev_ioctl(struct inode *inode, struct file 
*file, unsigned int cmd
                        if (get_user(idx, (int __user *)arg))
                                return -EFAULT;
 
-                       if ((buf = kmalloc(HID_STRING_SIZE, GFP_KERNEL)) == 
NULL)
+                       if ((buf = kmalloc_node(HID_STRING_SIZE, GFP_KERNEL, 
dev_to_node(&dev->dev))) == NULL)
                                return -ENOMEM;
 
                        if ((len = usb_string(dev, idx, buf, 
HID_STRING_SIZE-1)) < 0) {

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to