--- /dev/null
+From 8d6847b6a32fb7423462c3d108e4283dac815e13 Mon Sep 17 00:00:00 2001
+From: Your Name <your@email.com>
+Date: Thu, 5 Oct 2017 12:31:22 +0300
+Subject: [PATCH 7/9] SWAP-DA: add CONFIG_SWAP_HOOK_ENERGY
+
+---
+ include/swap/hook_energy.h | 22 ++++++++++++++++++++++
+ net/bluetooth/rfcomm/sock.c | 3 +++
+ net/socket.c | 14 +++++++++++---
+ 3 files changed, 36 insertions(+), 3 deletions(-)
+ create mode 100644 include/swap/hook_energy.h
+
+diff --git a/include/swap/hook_energy.h b/include/swap/hook_energy.h
+new file mode 100644
+index 0000000..41d1dba
+--- /dev/null
++++ b/include/swap/hook_energy.h
+@@ -0,0 +1,22 @@
++#ifndef _LINUX_SWAP_HOOK_ENERGY_H
++#define _LINUX_SWAP_HOOK_ENERGY_H
++
++
++static inline void swap_bt_recvmsg(struct socket *sock, int len)
++{
++}
++
++static inline void swap_bt_sendmsg(struct socket *sock, int len)
++{
++}
++
++static inline void swap_sock_recvmsg(struct socket *sock, int len)
++{
++}
++
++static inline void swap_sock_sendmsg(struct socket *sock, int len)
++{
++}
++
++
++#endif /* _LINUX_SWAP_HOOK_ENERGY_H */
+diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
+index aeca305..ade5d1b 100644
+--- a/net/bluetooth/rfcomm/sock.c
++++ b/net/bluetooth/rfcomm/sock.c
+@@ -32,6 +32,7 @@
+ #include <net/bluetooth/hci_core.h>
+ #include <net/bluetooth/l2cap.h>
+ #include <net/bluetooth/rfcomm.h>
++#include <swap/hook_energy.h>
+
+ static const struct proto_ops rfcomm_sock_ops;
+
+@@ -670,6 +671,7 @@ static int rfcomm_sock_sendmsg(struct socket *sock, struct msghdr *msg,
+
+ done:
+ release_sock(sk);
++ swap_bt_sendmsg(sock, sent);
+
+ return sent;
+ }
+@@ -700,6 +702,7 @@ static int rfcomm_sock_recvmsg(struct socket *sock, struct msghdr *msg,
+ if (atomic_read(&sk->sk_rmem_alloc) <= (sk->sk_rcvbuf >> 2))
+ rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
+ release_sock(sk);
++ swap_bt_recvmsg(sock, len);
+
+ return len;
+ }
+diff --git a/net/socket.c b/net/socket.c
+index f24a332..dadcf14 100644
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -107,6 +107,7 @@
+ #include <linux/atalk.h>
+ #include <net/busy_poll.h>
+ #include <linux/errqueue.h>
++#include <swap/hook_energy.h>
+
+ #ifdef CONFIG_NET_RX_BUSY_POLL
+ unsigned int sysctl_net_busy_read __read_mostly;
+@@ -662,6 +663,7 @@ int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
+ ret = __sock_sendmsg(&iocb, sock, msg, size);
+ if (-EIOCBQUEUED == ret)
+ ret = wait_on_sync_kiocb(&iocb);
++ swap_sock_sendmsg(sock, ret);
+ return ret;
+ }
+ EXPORT_SYMBOL(sock_sendmsg);
+@@ -810,6 +812,7 @@ int sock_recvmsg(struct socket *sock, struct msghdr *msg,
+ ret = __sock_recvmsg(&iocb, sock, msg, size, flags);
+ if (-EIOCBQUEUED == ret)
+ ret = wait_on_sync_kiocb(&iocb);
++ swap_sock_recvmsg(sock, ret);
+ return ret;
+ }
+ EXPORT_SYMBOL(sock_recvmsg);
+@@ -923,6 +926,7 @@ static ssize_t sock_aio_read(struct kiocb *iocb, const struct iovec *iov,
+ unsigned long nr_segs, loff_t pos)
+ {
+ struct sock_iocb siocb, *x;
++ ssize_t res;
+
+ if (pos != 0)
+ return -ESPIPE;
+@@ -934,7 +938,9 @@ static ssize_t sock_aio_read(struct kiocb *iocb, const struct iovec *iov,
+ x = alloc_sock_iocb(iocb, &siocb);
+ if (!x)
+ return -ENOMEM;
+- return do_sock_read(&x->async_msg, iocb, iocb->ki_filp, iov, nr_segs);
++ res = do_sock_read(&x->async_msg, iocb, iocb->ki_filp, iov, nr_segs);
++ swap_sock_recvmsg(iocb->ki_filp->private_data, (int)res);
++ return res;
+ }
+
+ static ssize_t do_sock_write(struct msghdr *msg, struct kiocb *iocb,
+@@ -965,6 +971,7 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const struct iovec *iov,
+ unsigned long nr_segs, loff_t pos)
+ {
+ struct sock_iocb siocb, *x;
++ ssize_t res;
+
+ if (pos != 0)
+ return -ESPIPE;
+@@ -972,8 +979,9 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const struct iovec *iov,
+ x = alloc_sock_iocb(iocb, &siocb);
+ if (!x)
+ return -ENOMEM;
+-
+- return do_sock_write(&x->async_msg, iocb, iocb->ki_filp, iov, nr_segs);
++ res = do_sock_write(&x->async_msg, iocb, iocb->ki_filp, iov, nr_segs);
++ swap_sock_sendmsg(iocb->ki_filp->private_data, (int)res);
++ return res;
+ }
+
+ /*
+--
+2.1.4
+