+
+int
+ksocknal_lib_memory_pressure(ksock_conn_t *conn)
+{
+ int rc = 0;
+ ksock_sched_t *sched;
+
+ sched = conn->ksnc_scheduler;
+ cfs_spin_lock_bh (&sched->kss_lock);
+
+ if (!SOCK_TEST_NOSPACE(conn->ksnc_sock) &&
+ !conn->ksnc_tx_ready) {
+ /* SOCK_NOSPACE is set when the socket fills
+ * and cleared in the write_space callback
+ * (which also sets ksnc_tx_ready). If
+ * SOCK_NOSPACE and ksnc_tx_ready are BOTH
+ * zero, I didn't fill the socket and
+ * write_space won't reschedule me, so I
+ * return -ENOMEM to get my caller to retry
+ * after a timeout */
+ rc = -ENOMEM;
+ }
+
+ cfs_spin_unlock_bh (&sched->kss_lock);
+
+ return rc;
+}
+
+int
+ksocknal_lib_bind_thread_to_cpu(int id)
+{
+#if defined(CONFIG_SMP) && defined(CPU_AFFINITY)
+ id = ksocknal_sched2cpu(id);
+ if (cpu_online(id)) {
+ cpumask_t m = CPU_MASK_NONE;
+ cpu_set(id, m);
+ set_cpus_allowed(current, m);
+ return 0;
+ }
+
+ return -1;
+
+#else
+ return 0;
+#endif
+}